鱼C论坛

 找回密码
 立即注册
查看: 1159|回复: 13

[已解决]挑数字

[复制链接]
发表于 2020-9-30 23:07:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Screenshot_20200930_230601.jpg

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int cnt,num;
  5.     scanf("%d",&cnt);
  6.     getchar();
  7.     int a[cnt];
  8.     for (int i=0;i<cnt;i++){
  9.         scanf("%d",&a[i]);
  10.         getchar();
  11. }
  12.     int cnt1=0,cnt2=0;
  13.     for (int j;j<cnt;j++){
  14.         if(a[j]%2==0&&a[j]%3==0){
  15.             cnt1++;
  16.             if(cnt1==1){
  17.                 printf("%d",a[j]);
  18.             }else if(cnt1>1){
  19.                 printf(" %d",a[j]);
  20. }
  21. }
  22. }
  23.     if(cnt1==0){
  24.         printf("-1");
  25. }
  26.     printf("\n");
  27.     for (int k;k<cnt;k++){
  28.         if(a[k]%2!=0||a[k]%7==0){
  29.             cnt2++;
  30.             if (cnt2==1){
  31.                 printf("%d",a[k]);
  32. }
  33.             else if(cnt2>1){
  34.                 printf(" %d",a[k]);
  35. }
  36. }
  37. }
  38.     if(cnt2==0){
  39.         printf("-1");
  40. }
  41.     printf("\n");
  42.     return 0;
  43. }
复制代码



求订正谢谢
最佳答案
2020-10-1 11:06:38
本帖最后由 风过无痕1989 于 2020-10-1 13:03 编辑
4399king 发表于 2020-10-1 09:44
答案很接近了,但是还是有误,麻烦您看一看图片中的sample input1和sample output1


将36行拆分成两行即可,代码如下:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int cnt,cnt1 = 0,cnt2 = 0;
  5.     int i,j;
  6.     int a[10] = {0};
  7.     scanf("%d",&cnt);
  8.     getchar();

  9.     for (i = 0;i < cnt;i++)
  10.     {
  11.         scanf("%d",&a[i]);
  12.         getchar();
  13.     }

  14.     for (j = 0;j < cnt;j++)
  15.     {
  16.         if(a[j] % 2 == 0 && a[j] % 3 == 0)  // 输出是偶数且能被3整除的数
  17.         {
  18.             printf("%d ",a[j]);
  19.             cnt1++;
  20.         }
  21.     }
  22.     if(cnt1 == 0)                           // 没有选到数,输出-1
  23.     {
  24.             printf("-1\n");
  25.     }
  26.     else
  27.             printf("\n");

  28.     for (j = 0;j < cnt;j++)
  29.     {
  30.         if(a[j] % 2 != 0 || a[j] % 7 == 0)  // 输出是奇数或能被7整除的数
  31.         {
  32.             printf("%d ",a[j]);
  33.             cnt2++;
  34.         }
  35.     }

  36.     if(cnt2 == 0)                           // 没有选到数,输出-1
  37.     {
  38.            printf("-1\n");
  39.     }
  40.     else
  41.            printf("\n");

  42.     return 0;
  43. }
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-1 02:27:51 | 显示全部楼层
你的代码太复杂,16行与26行是同一个语句使用两次,如若不然,有些数就会被跳过。以下是我的代码(因我的编译器不支持C99,1、将变量的定义全部移到了头部位置,2、 for 语句中,不能定义变量类型,故也移到了头部位置,3、因不支持变长数组,调试时,数组我采用的固定值30,即从 1 到 30 来作为输入),仅供参考:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int cnt,cnt1 = 0,cnt2 = 0;
  5.     int i,j;
  6.     int a[cnt] = {0};                       // 定义数组并初始化
  7.     scanf("%d",&cnt);
  8.     getchar();

  9.     for (i = 0;i < cnt;i++)
  10.     {
  11.         scanf("%d",&a[i]);
  12.         getchar();
  13.     }

  14.     for (j = 0;j < cnt;j++)
  15.     {
  16.         if(a[j] % 2 == 0 && a[j] % 3 == 0)  // 输出是偶数且能被3整除的数
  17.         {
  18.             printf("%d ",a[j]);
  19.             cnt1++;
  20.         }
  21.     }
  22.     printf("\n");

  23.     for (j = 0;j < cnt;j++)
  24.     {
  25.         if(a[j] % 2 != 0 || a[j] % 7 == 0)  // 输出是奇数或能被7整除的数
  26.         {
  27.             printf("%d ",a[j]);
  28.             cnt2++;
  29.         }
  30.     }
  31.     printf("\n");

  32.     if(cnt1 == 0 && cnt2 == 0)              // 没有选到数,输出-1
  33.     printf("-1");

  34.     printf("\n");

  35.     return 0;
  36. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

 楼主| 发表于 2020-10-1 09:44:54 | 显示全部楼层
本帖最后由 4399king 于 2020-10-1 09:49 编辑
风过无痕1989 发表于 2020-10-1 02:27
你的代码太复杂,16行与26行是同一个语句使用两次,如若不然,有些数就会被跳过。以下是我的代码(因我的编 ...





答案很接近了,但是还是有误,麻烦您看一看图片中的sample input1和sample output1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-1 10:36:56 | 显示全部楼层
4399king 发表于 2020-10-1 09:44
答案很接近了,但是还是有误,麻烦您看一看图片中的sample input1和sample output1

把36行的if拆开不就行了,就像你的代码一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-1 11:06:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风过无痕1989 于 2020-10-1 13:03 编辑
4399king 发表于 2020-10-1 09:44
答案很接近了,但是还是有误,麻烦您看一看图片中的sample input1和sample output1


将36行拆分成两行即可,代码如下:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int cnt,cnt1 = 0,cnt2 = 0;
  5.     int i,j;
  6.     int a[10] = {0};
  7.     scanf("%d",&cnt);
  8.     getchar();

  9.     for (i = 0;i < cnt;i++)
  10.     {
  11.         scanf("%d",&a[i]);
  12.         getchar();
  13.     }

  14.     for (j = 0;j < cnt;j++)
  15.     {
  16.         if(a[j] % 2 == 0 && a[j] % 3 == 0)  // 输出是偶数且能被3整除的数
  17.         {
  18.             printf("%d ",a[j]);
  19.             cnt1++;
  20.         }
  21.     }
  22.     if(cnt1 == 0)                           // 没有选到数,输出-1
  23.     {
  24.             printf("-1\n");
  25.     }
  26.     else
  27.             printf("\n");

  28.     for (j = 0;j < cnt;j++)
  29.     {
  30.         if(a[j] % 2 != 0 || a[j] % 7 == 0)  // 输出是奇数或能被7整除的数
  31.         {
  32.             printf("%d ",a[j]);
  33.             cnt2++;
  34.         }
  35.     }

  36.     if(cnt2 == 0)                           // 没有选到数,输出-1
  37.     {
  38.            printf("-1\n");
  39.     }
  40.     else
  41.            printf("\n");

  42.     return 0;
  43. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-10-1 14:06:19 | 显示全部楼层
风过无痕1989 发表于 2020-10-1 11:06
将36行拆分成两行即可,代码如下:

大神,系统显示runtime error,我方了,这可怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-1 14:14:19 | 显示全部楼层
风过无痕1989 发表于 2020-10-1 11:06
将36行拆分成两行即可,代码如下:

各位大佬还有别的思路吗,就是希望运行时间更短一些就能过了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-1 14:15:03 | 显示全部楼层
巴巴鲁 发表于 2020-10-1 10:36
把36行的if拆开不就行了,就像你的代码一样

报告大佬,这个代码不够优化,系统不给过,请问你们有别的思路吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-1 14:35:59 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-10-1 15:04 编辑
4399king 发表于 2020-10-1 14:06
大神,系统显示runtime error,我方了,这可怎么办


你用什么系统?我用 VC++6.0 与 DEV_C++ 运行都是正常的

xuanshu.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-1 15:38:42 | 显示全部楼层
4399king 发表于 2020-10-1 14:06
大神,系统显示runtime error,我方了,这可怎么办

关于你的系统显示 runtime error,我给你如下的建议:
1、所给出的题目,并没有要求系统在多少时间内运行完成;
2、在你的系统中找到,并关闭 runtime 这个功能,要知道,你是在学习C语言编程,不是参加某个程序优化大赛,上面的程序,我看了又看,去掉哪一条语句,都达不到题目要求;
3、若找不到关闭 runtime 这个功能,建议更换编程软件;
4、若你不愿意关闭 runtime 这个功能,那么,建议你更换你的电脑系统(或手机),买一台运行速度更快的;
5、以上的你都不愿意改变,那就只有我们改变了 ------ 以后不再回复你任何问题。

祝顺利!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-1 15:40:10 | 显示全部楼层
风过无痕1989 发表于 2020-10-1 14:35
你用什么系统?我用 VC++6.0 与 DEV_C++ 运行都是正常的

报告,我那个是学校的系统,它没说代码错误,但是代码运行的速度没能达到题目要求,需要更简洁的代码,也就是把代码优化,我也很头疼这个,就算编译运行正常,可是时间没达到要求还是过不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-1 22:49:54 | 显示全部楼层
风过无痕1989 发表于 2020-10-1 15:38
关于你的系统显示 runtime error,我给你如下的建议:
1、所给出的题目,并没有要求系统在多少时间内运 ...

那个大佬,我找到办法了,用指针访问数组就可以了,把您代码中的数组元素换成指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-1 23:42:15 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-10-1 23:57 编辑
4399king 发表于 2020-10-1 22:49
那个大佬,我找到办法了,用指针访问数组就可以了,把您代码中的数组元素换成指针

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int cnt,cnt1 = 0,cnt2 = 0;
  5.     int i,*p;
  6.     int a[cnt] = {0};
  7.     p = a;
  8.     scanf("%d",&cnt);
  9.     getchar();

  10.     for (i = 0;i < cnt;i++)
  11.     {
  12.         scanf("%d",p + i);
  13.         getchar();
  14.     }

  15.     for (i = 0;i < cnt;i++)
  16.     {
  17.         if(*(p + i) % 2 == 0 && *(p + i) % 3 == 0)  // 输出是偶数且能被3整除的数
  18.         {
  19.             printf("%d ",*(p + i));
  20.             cnt1++;
  21.         }
  22.     }
  23.     if(cnt1 == 0)                           // 没有选到数,输出-1
  24.     {
  25.             printf("-1\n");
  26.     }
  27.     else
  28.             printf("\n");

  29.     for (i = 0;i < cnt;i++)
  30.     {
  31.         if(*(p + i) % 2 != 0 || *(p + i) % 7 == 0)  // 输出是奇数或能被7整除的数
  32.         {
  33.             printf("%d ",*(p + i));
  34.             cnt2++;
  35.         }
  36.     }

  37.     if(cnt2 == 0)                           // 没有选到数,输出-1
  38.     {
  39.            printf("-1\n");
  40.     }
  41.     else
  42.            printf("\n");

  43.     return 0;
  44. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-2 21:40:38 | 显示全部楼层

无论如何,谢谢您啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 12:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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