回答編集履歴
3
説明を追加
answer
CHANGED
@@ -172,4 +172,19 @@
|
|
172
172
|
addNode();
|
173
173
|
return 0;
|
174
174
|
}
|
175
|
-
```
|
175
|
+
```
|
176
|
+
**追記2**
|
177
|
+
> 1つ質問ですが、変数 i は2進数として扱っているのですか?
|
178
|
+
|
179
|
+
```text
|
180
|
+
{10, 20, 30} {1, 1, 1} 7
|
181
|
+
{10, 20 } {1, 1, 0} 6
|
182
|
+
{10, 30} {1, 0, 1} 5
|
183
|
+
{10 } {1, 0, 0} 4
|
184
|
+
{ 20, 30} {0, 1, 1} 3
|
185
|
+
{ 20 } {0, 1, 0} 2
|
186
|
+
{ 30} {0, 0, 1} 1
|
187
|
+
{ } {0, 0, 0} 0
|
188
|
+
```
|
189
|
+
表示するものを 1、表示しないものを 0 とすると、
|
190
|
+
それは 2進数とみなして、7~0 の値になります。
|
2
全ソースを追加
answer
CHANGED
@@ -52,4 +52,124 @@
|
|
52
52
|
+ printf("}\n");
|
53
53
|
+ }
|
54
54
|
return 1;
|
55
|
+
```
|
56
|
+
**追記**
|
57
|
+
```C
|
58
|
+
#include<stdio.h>
|
59
|
+
#include<stdlib.h>
|
60
|
+
|
61
|
+
typedef struct LISTNODE
|
62
|
+
{
|
63
|
+
int data;
|
64
|
+
int hantei;
|
65
|
+
struct LISTNODE *pNext;
|
66
|
+
}ListNode;
|
67
|
+
|
68
|
+
ListNode head;
|
69
|
+
|
70
|
+
ListNode* getNode(int num){
|
71
|
+
int i;
|
72
|
+
ListNode *retNode=&head;
|
73
|
+
|
74
|
+
for(i=0;i<num;i++){
|
75
|
+
retNode=retNode->pNext;
|
76
|
+
if(retNode==NULL){
|
77
|
+
return 0;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
return retNode;
|
81
|
+
}
|
82
|
+
|
83
|
+
int checkNode(int num){
|
84
|
+
ListNode *currentNode, *pCheckNode=getNode(num);
|
85
|
+
|
86
|
+
currentNode=head.pNext;
|
87
|
+
|
88
|
+
while(currentNode!=pCheckNode){
|
89
|
+
if(currentNode->data==pCheckNode->data)
|
90
|
+
return 1;
|
91
|
+
currentNode=currentNode->pNext;
|
92
|
+
}
|
93
|
+
return 0;
|
94
|
+
}
|
95
|
+
|
96
|
+
void deleteNode(int num){
|
97
|
+
ListNode *targetNode=getNode(num);
|
98
|
+
ListNode *pPrevNode=getNode(num-1);
|
99
|
+
pPrevNode -> pNext =targetNode -> pNext;
|
100
|
+
free(targetNode);
|
101
|
+
}
|
102
|
+
|
103
|
+
int swapNode(int num1, int num2){
|
104
|
+
ListNode *node1=getNode(num1), *node2=getNode(num2);
|
105
|
+
ListNode *Prenode1=getNode(num1-1), *Prenode2=getNode(num2-1);
|
106
|
+
ListNode *tmpNext;
|
107
|
+
|
108
|
+
if(node1->pNext!=node2){
|
109
|
+
tmpNext=node1->pNext;
|
110
|
+
node1->pNext=node2->pNext;
|
111
|
+
node2->pNext=tmpNext;
|
112
|
+
Prenode1->pNext=node2;
|
113
|
+
Prenode2->pNext=node1;
|
114
|
+
}else{
|
115
|
+
node1->pNext=node2->pNext;
|
116
|
+
node2->pNext=node1;
|
117
|
+
Prenode1->pNext=node2;
|
118
|
+
}
|
119
|
+
return 1;
|
120
|
+
}
|
121
|
+
|
122
|
+
void printNode(ListNode *currentNode){
|
123
|
+
if(currentNode!=NULL){
|
124
|
+
if(currentNode->hantei!=1){
|
125
|
+
printf("%d, ",currentNode->data);
|
126
|
+
}
|
127
|
+
printNode(currentNode->pNext);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
|
131
|
+
int addNode(){
|
132
|
+
ListNode *newNode, *pCheckNode, *pNextNode;
|
133
|
+
|
134
|
+
FILE *fp=fopen("test3.txt","r");
|
135
|
+
if(!fp) return 0;
|
136
|
+
int k,c=0;
|
137
|
+
if (fscanf(fp, "%d:", &k) != 1) return 0;
|
138
|
+
for (int i = 1; i <= k; i++) {
|
139
|
+
//printf("a[%d] = %d\n", i, a[i]);
|
140
|
+
ListNode *pPrevNode=getNode(c);
|
141
|
+
newNode=(ListNode*)malloc(sizeof(ListNode));
|
142
|
+
if (fscanf(fp, "%d", &newNode->data) != 1) return 0;
|
143
|
+
newNode->pNext=pPrevNode->pNext;
|
144
|
+
pPrevNode->pNext=newNode;
|
145
|
+
//printf("%d\n",checkNode(c+1));
|
146
|
+
if(checkNode(c+1)==1){
|
147
|
+
deleteNode(c+1);
|
148
|
+
continue;
|
149
|
+
}
|
150
|
+
c++;
|
151
|
+
//printf("c=%d\n",c);
|
152
|
+
}
|
153
|
+
|
154
|
+
fclose(fp);
|
155
|
+
for (int i = 1 << c; --i >= 0; ) {
|
156
|
+
pCheckNode = head.pNext;
|
157
|
+
printf("{");
|
158
|
+
const char *sep = "";
|
159
|
+
for (int j = c; --j >= 0; ) {
|
160
|
+
if (i >> j & 1) {
|
161
|
+
printf("%s%d", sep, pCheckNode->data);
|
162
|
+
sep = " , ";
|
163
|
+
}
|
164
|
+
pCheckNode = pCheckNode->pNext;
|
165
|
+
}
|
166
|
+
printf("}\n");
|
167
|
+
}
|
168
|
+
return 1;
|
169
|
+
}
|
170
|
+
|
171
|
+
int main(void){
|
172
|
+
addNode();
|
173
|
+
return 0;
|
174
|
+
}
|
55
175
|
```
|
1
修正
answer
CHANGED
@@ -7,12 +7,9 @@
|
|
7
7
|
ListNode *pPrevNode=getNode(c);
|
8
8
|
newNode=(ListNode*)malloc(sizeof(ListNode));
|
9
9
|
- newNode->data=a[i];
|
10
|
-
+ if (fscanf(fp, "
|
10
|
+
+ if (fscanf(fp, "%d", &newNode->data) != 1) return 0;
|
11
11
|
newNode->pNext=pPrevNode->pNext;
|
12
|
-
}
|
13
12
|
|
14
|
-
fclose(fp);
|
15
|
-
|
16
13
|
- int nodeNum, num=0;
|
17
14
|
- ListNode *pEndNode=getNode(c);
|
18
15
|
- while(num!=c){
|
@@ -54,6 +51,5 @@
|
|
54
51
|
+ }
|
55
52
|
+ printf("}\n");
|
56
53
|
+ }
|
57
|
-
+
|
58
54
|
return 1;
|
59
55
|
```
|