- /*************************************************************************************
- 73. (NOI'95.1_4) N 位由 0 和 1 组成的字符串 A、B 可分别表示为
- A=aNaN-1…ai…a2a1
- B=bNbN-1…bi…b2b1
- 其中, ai=0或1, bi=0或1, 1≤i≤N, N≤15.
- 如果存在某一位j(j∈1…N), 在该位上两串不同, 即aj≠bj, 而其余N-1位
- 上的两串相同, 即ai=bi(i∈1…N,i≠j), 则称 A、B 两串“互邻”。
- 比如,在N=4时, A=1100, B=1000, A、B 两串“互邻”, 而 C=1100, D=
- 1010, C、D 两串不“互邻”。
- 编程要求:
- 寻找一个含有 2N 个上述01串的序列, 该序列满足以下要求:
- ① 组成该序列的每一个01串都与其它串不同;
- ② 第k个串与第k-1个串有“互邻”关系,2≤k≤2N;
- ③ 该序列首项由输入指定.
- 例如 N=2, 指定首项为01, 则一个满足上述要求的序列为
- 01 11 10 00
- 输入数据 ┏━━━━━━┓ ┏━━━━━┓
- 文件名由键盘输入 ┃EXAMPLE4.TXT┃ ┃MODEL4.TXT┃
- 该文件共有两行 ┠──────┨ ┠─────┨
- 第一行为 N ┃2 ┃ ┃2 ┃
- 第二行为指定的序列首项 ┃01 ┃ ┃01 ┃
- ┃ ┃ ┃11 ┃
- 输出数据 ┗━━━━━━┛ ┃10 ┃
- 输出文件为 OUTPUT.TXT ┃00 ┃
- 第一行为 N ┃ ┃
- 第二行至第2N+1行依次输出序列的每一个串. ┗━━━━━┛
- 输入输出举例
- 参考输入文件: EXAMPLE4.TXT
- 参考输出文件: MODEL4.TXT
- *******************************************************************************************/
- #include <stdio.h>
- #include <malloc.h>
- void main()
- {
- int i,k,n;
- char c;
- int *serial;
- FILE *fp;
- fp = fopen("input.txt","r");
- if(!fp)
- {
- printf("打开输入文件失败!/n");
- return;
- }
- fscanf(fp,"%ld",&n);
- serial = (int*)malloc(n*sizeof(int));
- fscanf(fp,"%c",&c);
- for(i=0; i<n; i++)
- {
- fscanf(fp,"%c",&c);
- serial[i] = c & 0x01;
- }
- fclose(fp);
- fp = fopen("output.txt","w");
- fprintf(fp,"%d/n",n);
- for(k=0; k<2*n; k++)
- {
- for(i=0; i<n; i++)
- fprintf(fp,"%d",serial[i]);
- fprintf(fp,"/n");
- serial[k%n] = !serial[k%n];
- }
- fclose(fp);
- free(serial);
- }
练习73
最新推荐文章于 2023-08-22 16:30:45 发布