鱼C论坛

 找回密码
 立即注册
查看: 1516|回复: 1

[已解决]如何使输出结果和输入结果分开

[复制链接]
发表于 2020-5-18 01:13:28 | 显示全部楼层 |阅读模式
30鱼币
这是测试得到的输出结果
另一个是需要的输出样式
以下是代码
  1. #include <stdio.h>
  2. #include <string.h>

  3. #define M 1046527
  4. #define NIL (-1)
  5. #define L 14

  6. char H[M][L];

  7. int getChar(char ch) {
  8.         if(ch=='A')return 1;
  9.         else if(ch=='C')return 2;
  10.         else if(ch=='G')return 3;
  11.         else if(ch=='T')return 4;
  12.         else return 0;
  13. }

  14. long long getKey(char str[]) {
  15.         long long sum=0,p=1,i;
  16.         for(i=0; i<strlen(str); i++) {
  17.                 sum+=p*(getChar(str[i]));
  18.                 p*=5;
  19.         }
  20.         return sum;
  21. }

  22. int h1(int key) {
  23.         return key % M;
  24. }
  25. int h2(int key) {
  26.         return 1+(key % (M-1));
  27. }

  28. int find(char str[]) {
  29.         long long key,i,h;
  30.         key=getKey(str);
  31.         for(i=0;; i++) {
  32.                 h=(h1(key)+i*h2(key)) % M;
  33.                 if(strcmp(H[h],str)==0)return 1;
  34.                 else if(strlen(H[h])==0)return 0;
  35.         }
  36.         return 0;
  37. }

  38. int insert(char str[]) {
  39.         long long key,i,h;
  40.         key=getKey(str);
  41.         for(i=0;; i++) {
  42.                 h=(h1(key)+i*h2(key))%M;
  43.                 if(strcmp(H[h],str)==0)return 1;
  44.                 else if(strlen(H[h])==0) {
  45.                         strcpy(H[h],str);
  46.                         return 0;
  47.                 }
  48.         }
  49.         return 0;
  50. }

  51. int main() {
  52.         int i,n,h;
  53.         char str[L],com[9];
  54.         for(i=0; i<M; i++)H[i][0]='\0';
  55.         scanf("%d",&n);
  56.         for(i=0; i<n; i++) {
  57.                 scanf("%s %s",com,str);

  58.     if( com[0] == 'i' )
  59.     {
  60.             insert(str);
  61.         }
  62.         else
  63.         {
  64.                 if(find(str))
  65.             {
  66.                     printf("yes\n");
  67.                 }
  68.                 else
  69.                 {
  70.                         printf("no\n");
  71.                 }
  72.         }
  73.     }
  74.     return 0;
  75. }
复制代码
最佳答案
2020-5-18 01:13:29
  1. #include <stdio.h>
  2. #include <string.h>

  3. #define M 1046527
  4. #define NIL (-1)
  5. #define L 14

  6. char H[M][L];

  7. int getChar(char ch) {
  8.     if(ch=='A')return 1;
  9.     else if(ch=='C')return 2;
  10.     else if(ch=='G')return 3;
  11.     else if(ch=='T')return 4;
  12.     else return 0;
  13. }

  14. long long getKey(char str[]) {
  15.     long long sum=0,p=1,i;
  16.     for(i=0; i<strlen(str); i++) {
  17.         sum+=p*(getChar(str[i]));
  18.         p*=5;
  19.     }
  20.     return sum;
  21. }

  22. int h1(int key) {
  23.     return key % M;
  24. }
  25. int h2(int key) {
  26.     return 1+(key % (M-1));
  27. }

  28. int find(char str[]) {
  29.     long long key,i,h;
  30.     key=getKey(str);
  31.     for(i=0;; i++) {
  32.         h=(h1(key)+i*h2(key)) % M;
  33.         if(strcmp(H[h],str)==0)return 1;
  34.         else if(strlen(H[h])==0)return 0;
  35.     }
  36.     return 0;
  37. }

  38. int insert(char str[]) {
  39.     long long key,i,h;
  40.     key=getKey(str);
  41.     for(i=0;; i++) {
  42.         h=(h1(key)+i*h2(key))%M;
  43.         if(strcmp(H[h],str)==0)return 1;
  44.         else if(strlen(H[h])==0) {
  45.             strcpy(H[h],str);
  46.             return 0;
  47.         }
  48.     }
  49.     return 0;
  50. }

  51. int main() {
  52.     //int i,n,h;
  53.     int i,n;
  54.     char str[L],com[9];
  55.     for(i=0; i<M; i++)H[i][0]='\0';
  56.     scanf("%d",&n);

  57.     char *result[64];
  58.     int index = 0;
  59.     for(i=0; i<n; i++) {
  60.         scanf("%s %s",com,str);
  61.         if( com[0] == 'i' )
  62.         {
  63.             insert(str);
  64.         }
  65.         else
  66.         {
  67.             if(find(str))
  68.             {
  69.                 //printf("yes\n");
  70.                 result[index++] = "yes";
  71.             }
  72.             else
  73.             {
  74.                 //printf("no\n");
  75.                 result[index++] = "no";
  76.             }
  77.         }
  78.     }
  79.     for(i = 0; i < index; ++i) {
  80.         printf("%s\n", result[i]);
  81.     }
  82.     return 0;
  83. }
复制代码

测试的输出结果

测试的输出结果

需要的输出样式

需要的输出样式
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-18 01:13:29 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <string.h>

  3. #define M 1046527
  4. #define NIL (-1)
  5. #define L 14

  6. char H[M][L];

  7. int getChar(char ch) {
  8.     if(ch=='A')return 1;
  9.     else if(ch=='C')return 2;
  10.     else if(ch=='G')return 3;
  11.     else if(ch=='T')return 4;
  12.     else return 0;
  13. }

  14. long long getKey(char str[]) {
  15.     long long sum=0,p=1,i;
  16.     for(i=0; i<strlen(str); i++) {
  17.         sum+=p*(getChar(str[i]));
  18.         p*=5;
  19.     }
  20.     return sum;
  21. }

  22. int h1(int key) {
  23.     return key % M;
  24. }
  25. int h2(int key) {
  26.     return 1+(key % (M-1));
  27. }

  28. int find(char str[]) {
  29.     long long key,i,h;
  30.     key=getKey(str);
  31.     for(i=0;; i++) {
  32.         h=(h1(key)+i*h2(key)) % M;
  33.         if(strcmp(H[h],str)==0)return 1;
  34.         else if(strlen(H[h])==0)return 0;
  35.     }
  36.     return 0;
  37. }

  38. int insert(char str[]) {
  39.     long long key,i,h;
  40.     key=getKey(str);
  41.     for(i=0;; i++) {
  42.         h=(h1(key)+i*h2(key))%M;
  43.         if(strcmp(H[h],str)==0)return 1;
  44.         else if(strlen(H[h])==0) {
  45.             strcpy(H[h],str);
  46.             return 0;
  47.         }
  48.     }
  49.     return 0;
  50. }

  51. int main() {
  52.     //int i,n,h;
  53.     int i,n;
  54.     char str[L],com[9];
  55.     for(i=0; i<M; i++)H[i][0]='\0';
  56.     scanf("%d",&n);

  57.     char *result[64];
  58.     int index = 0;
  59.     for(i=0; i<n; i++) {
  60.         scanf("%s %s",com,str);
  61.         if( com[0] == 'i' )
  62.         {
  63.             insert(str);
  64.         }
  65.         else
  66.         {
  67.             if(find(str))
  68.             {
  69.                 //printf("yes\n");
  70.                 result[index++] = "yes";
  71.             }
  72.             else
  73.             {
  74.                 //printf("no\n");
  75.                 result[index++] = "no";
  76.             }
  77.         }
  78.     }
  79.     for(i = 0; i < index; ++i) {
  80.         printf("%s\n", result[i]);
  81.     }
  82.     return 0;
  83. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 20:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表