练习73

 
  1. /*************************************************************************************
  2.   73. (NOI'95.1_4) N 位由 0 和 1 组成的字符串 A、B 可分别表示为
  3.   A=aNaN-1…ai…a2a1
  4.   B=bNbN-1…bi…b2b1
  5.  其中, ai=0或1, bi=0或1,   1≤i≤N, N≤15.
  6.     如果存在某一位j(j∈1…N), 在该位上两串不同, 即aj≠bj, 而其余N-1位
  7.  上的两串相同, 即ai=bi(i∈1…N,i≠j), 则称 A、B 两串“互邻”。
  8.   比如,在N=4时, A=1100, B=1000, A、B 两串“互邻”, 而 C=1100, D=
  9.  1010, C、D 两串不“互邻”。
  10.  编程要求:
  11.     寻找一个含有 2N 个上述01串的序列, 该序列满足以下要求:
  12.     ① 组成该序列的每一个01串都与其它串不同;
  13.     ② 第k个串与第k-1个串有“互邻”关系,2≤k≤2N;
  14.     ③ 该序列首项由输入指定.
  15.     例如 N=2, 指定首项为01, 则一个满足上述要求的序列为
  16.     01  11  10  00
  17.   输入数据                         ┏━━━━━━┓  ┏━━━━━┓
  18.     文件名由键盘输入                 ┃EXAMPLE4.TXT┃  ┃MODEL4.TXT┃
  19.     该文件共有两行                   ┠──────┨  ┠─────┨
  20.     第一行为  N                      ┃2           ┃  ┃2         ┃
  21.     第二行为指定的序列首项           ┃01          ┃  ┃01        ┃
  22.                                      ┃            ┃  ┃11        ┃
  23.   输出数据                         ┗━━━━━━┛  ┃10        ┃
  24.     输出文件为 OUTPUT.TXT                              ┃00        ┃
  25.     第一行为  N                                        ┃          ┃
  26.     第二行至第2N+1行依次输出序列的每一个串.            ┗━━━━━┛
  27.   输入输出举例
  28.     参考输入文件: EXAMPLE4.TXT
  29.     参考输出文件: MODEL4.TXT
  30.   *******************************************************************************************/
  31. #include <stdio.h>
  32. #include <malloc.h>
  33. void main()
  34. {
  35.     int i,k,n;
  36.     char c;
  37.     int *serial;
  38.     FILE *fp;
  39.     fp = fopen("input.txt","r");
  40.     if(!fp)
  41.     {
  42.         printf("打开输入文件失败!/n");
  43.         return;
  44.     }
  45.     fscanf(fp,"%ld",&n);
  46.     serial = (int*)malloc(n*sizeof(int));
  47.     fscanf(fp,"%c",&c);
  48.     for(i=0; i<n; i++)
  49.     {
  50.         fscanf(fp,"%c",&c);
  51.         serial[i] = c & 0x01;
  52.     }
  53.     fclose(fp);
  54.     fp = fopen("output.txt","w");
  55.     fprintf(fp,"%d/n",n);
  56.     for(k=0; k<2*n; k++)
  57.     {
  58.         for(i=0; i<n; i++)
  59.             fprintf(fp,"%d",serial[i]);
  60.         fprintf(fp,"/n");
  61.         serial[k%n] = !serial[k%n];
  62.     }
  63.     fclose(fp);
  64.     free(serial);
  65. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值