main.cpp

来自「我做的一些C语言练习题,里面一共有76道题目,主要用到一些计算机常用的算法,如:」· C++ 代码 · 共 70 行

CPP
70
字号
/*************************************************************************************

  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);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?