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 + -
显示快捷键?