鱼C论坛

 找回密码
 立即注册
查看: 1883|回复: 2

为什么这个代码通过不了开关灯问题

[复制链接]
发表于 2023-11-7 19:51:14 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
int main()
{
        int n,m,c,d,e,g;
        c = 0;
        scanf("%d %d",&n,&m);
        d = 0;
        g = n;
        e=m;
        int a[n+1];
        for(c=0;c<n;c++){
                a[c]= 1;
        }
        int f=-1;
        for(d=1;d<=n;d++){//n是编号
                for(c=1;c<=m;c++){//m是人
                        if(d%c==0){
                                a[d-1]=a[d-1]*f;
                        }
                }
        }
        for(n=0;n<e;n++){
                switch(a[n]){
                        case -1: if(n==1) printf("%d",n); if(n==0) printf("%d",n+1); if(n!=1&&n!=0) printf(",%d",n);break;
                        case 1: printf("");bre
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-7 19:51:25 | 显示全部楼层
这段代码有一些问题。首先,在第一个for循环中,数组a的大小为n+1,但是数组的下标是从0开始的,因此应该将a的大小定义为n。其次,在第二个for循环中,如果c为0,那么d%c会导致程序崩溃,因此应该将c的初始值改为1。最后,在第三个for循环中,当a[n]为1时,printf("")并没有输出任何内容,应该将其改为printf(" ")。

以下是修改后的代码:

#include<stdio.h>
int main()
{
        int n,m,c,d,e,g;
        c = 0;
        scanf("%d %d",&n,&m);
        d = 0;
        g = n;
        e=m;
        int a[n];
        for(c=0;c<n;c++){
                a[c]= 1;
        }
        int f=-1;
        for(d=1;d<=n;d++){//n是编号
                for(c=1;c<=m;c++){//m是人
                        if(c!=0 && d%c==0){
                                a[d-1]=a[d-1]*f;
                        }
                }
        }
        for(n=0;n<e;n++){
                switch(a[n]){
                        case -1: if(n==1) printf("%d",n); if(n==0) printf("%d",n+1); if(n!=1&&n!=0) printf(",%d",n);break;
                        case 1: printf(" ");break;
                }
        }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-7 19:52:50 | 显示全部楼层
这段代码可能存在一些问题,导致无法通过开关灯问题。让我帮您检查一下代码:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int n, m, c, d, e, g;
  5.     c = 0;
  6.     scanf("%d %d", &n, &m);
  7.     d = 0;
  8.     g = n;
  9.     e = m;
  10.     int a[n+1];
  11.     for (c = 0; c < n; c++) {
  12.         a[c] = 1;
  13.     }
  14.     int f = -1;
  15.     for (d = 1; d <= n; d++) { // n是编号
  16.         for (c = 1; c <= m; c++) { // m是人
  17.             if (d % c == 0) {
  18.                 a[d-1] = a[d-1] * f;
  19.             }
  20.         }
  21.     }
  22.     for (n = 0; n < e; n++) {
  23.         switch (a[n]) {
  24.             case -1:
  25.                 if (n == 1)
  26.                     printf("%d", n);
  27.                 if (n == 0)
  28.                     printf("%d", n + 1);
  29.                 if (n != 1 && n != 0)
  30.                     printf(",%d", n);
  31.                 break;
  32.             case 1:
  33.                 printf("");
  34.                 break;
  35.         }
  36.     }
  37.     return 0;
  38. }
复制代码

在代码中,我发现以下问题:

1. 第一个switch语句中,case 1下面的printf语句为空,这可能会导致输出出现问题。
2. 在第一个for循环中,变量c没有被使用,而在后续的循环中又被重新定义,这可能会引起逻辑错误。

另外,代码的逻辑不太清晰,建议您重新审视一下算法的设计,并且对变量名和注释进行梳理和清晰解释,确保代码的可读性和逻辑正确性。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 14:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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