鱼C论坛

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

[已解决]为什么没有输出啊 代码有什么问题啊

[复制链接]
发表于 2023-10-10 19:18:49 | 显示全部楼层 |阅读模式

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

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

x
题目是
一个正整数如果只有1和它本身两个因子,称为为素数。现在请你输出正整数m
和n
之间的素数(包含m
和n
),如果没有,输出no

输入描述
m
n
输出描述
m
和n
之间的素数,每行5个,且每个输出数字后面有一个空格。
#include<stdio.h>
int su(int x)
{
    int i=x,sum=0;
    for(int a=2;a<i;a++)
    {
        if(i/a==0){sum=i;continue;}
        else sum=0;
    }
    return sum;
}
int main()
{
    int m,n,t,s=0;
    scanf("%d %d",&m,&n);
    if(m>n){t=n;n=m;m=t;}
    for(int i=m;i<=n;i++)
    {
        if(su(i)!=0) printf("%d ",i);
        s++;
        if(s!=0&&s/5==0) printf("\n");
    }
}
最佳答案
2023-10-10 19:19:19
代码有两个问题:

1. 在判断一个数是否为素数时,应该判断该数能否被2到该数的平方根之间的任意一个数整除,而不是判断该数除以2到该数之间的任意一个数是否为0。

2. 在输出素数时,判断是否需要换行的条件应该是s%5==0,而不是s/5==0。

修改后的代码如下:
#include <stdio.h>
#include <math.h>

int is_prime(int x) {
    if (x < 2) {
        return 0;
    }
    int i;
    for (i = 2; i <= sqrt(x); i++) {
        if (x % i == 0) {
            return 0;
        }
    }
    return 1;
}

int main() {
    int m, n, count = 0;
    scanf("%d %d", &m, &n);
    if (m > n) {
        int temp = m;
        m = n;
        n = temp;
    }
    int i;
    for (i = m; i <= n; i++) {
        if (is_prime(i)) {
            printf("%d ", i);
            count++;
            if (count % 5 == 0) {
                printf("\n");
            }
        }
    }
    if (count % 5 != 0) {
        printf("\n");
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-10 19:19:19 | 显示全部楼层    本楼为最佳答案   
代码有两个问题:

1. 在判断一个数是否为素数时,应该判断该数能否被2到该数的平方根之间的任意一个数整除,而不是判断该数除以2到该数之间的任意一个数是否为0。

2. 在输出素数时,判断是否需要换行的条件应该是s%5==0,而不是s/5==0。

修改后的代码如下:
#include <stdio.h>
#include <math.h>

int is_prime(int x) {
    if (x < 2) {
        return 0;
    }
    int i;
    for (i = 2; i <= sqrt(x); i++) {
        if (x % i == 0) {
            return 0;
        }
    }
    return 1;
}

int main() {
    int m, n, count = 0;
    scanf("%d %d", &m, &n);
    if (m > n) {
        int temp = m;
        m = n;
        n = temp;
    }
    int i;
    for (i = m; i <= n; i++) {
        if (is_prime(i)) {
            printf("%d ", i);
            count++;
            if (count % 5 == 0) {
                printf("\n");
            }
        }
    }
    if (count % 5 != 0) {
        printf("\n");
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-10 19:19:53 | 显示全部楼层
代码中的循环判断条件有问题,不应该使用 == 来判断两个数是否相等,而是应该使用求模运算符 %。另外,在判断素数的逻辑中,如果找到除了1和自身以外的因子,就应该立即退出循环并返回0,而不是继续执行循环。下面是修改后的代码:
#include <stdio.h>int su(int x) {    if (x <= 1) {  // 小于等于1的数不是素数        return 0;    }    for (int a = 2; a * a <= x; a++) {        if (x % a == 0) {            return 0;  // 找到非1和自身的因子,不是素数        }    }    return 1;  // 是素数}int main() {    int m, n, t, s = 0;    scanf("%d %d", &m, &n);    if (m > n) {        t = n;        n = m;        m = t;    }    for (int i = m; i <= n; i++) {        if (su(i)) {            printf("%d ", i);            s++;            if (s != 0 && s % 5 == 0) {                printf("\n");            }        }    }    return 0;}
主要修改内容如下:
1. 修改 su() 函数的判断逻辑,修复判断素数的错误。
2. 在循环中使用 % 求模运算符来判断是否需要换行。

这样,代码将能正确输出 m 和 n 之间的素数,每行5个数字。希望对你有所帮助!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 07:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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