teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

説明を追加

2021/02/07 15:54

投稿

kazuma-s
kazuma-s

スコア8222

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

全ソースを追加

2021/02/07 15:54

投稿

kazuma-s
kazuma-s

スコア8222

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

修正

2021/02/07 07:59

投稿

kazuma-s
kazuma-s

スコア8222

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, " %d", &newNode->data) != 1) return 0;
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
  ```