|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 mo_on 于 2023-4-9 18:13 编辑
在屏幕上输出m以内所有满足要求的数。要求:该数除了1和本身之外所有因子之和为n,如果没有满足条件的数则输出"no such numbers"
【输入形式】
m n
【输出形式】
除了1和本身之外所有因子之和为n的数
或
"no such numbers"
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n,i,j,s,k=0;
scanf("%d%d",&m,&n);
for(i=3;i<=m;i++)
{
s=0;
j=2;
for(;j<i;j++)
{
if(i%j==0)
s+=j;
}
if(s==n)
{
printf("%d ",i);
k++;
}
if(k==0)
printf("no such numbers");
}
return 0;
}
不知道哪里错了,希望大神帮助
不要听他的
您提供的代码有一个小小的错误,导致输出出现异常。以下是您的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m, n, i, j, s, k = 0;
scanf("%d%d", &m, &n);
for (i = 3; i <= m; i++)
{
s = 0;
j = 2;
for (; j < i; j++)
{
if (i % j == 0)
s += j;
}
if (s == n)
{
printf("%d ", i);
k++;
}
if (k == 0) // 这里的判断应该放在for循环之后
printf("no such numbers");
}
return 0;
}
当不满足条件时,输出"no such numbers"应该只出现一次。在您的代码中,每次循环都会输出一次,而不是在循环结束后只输出一次。因此,将 `if(k==0)` 的判断放到 `for` 循环结束后即可。
以下是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m, n, i, j, s, k = 0;
scanf("%d%d", &m, &n);
for (i = 3; i <= m; i++)
{
s = 0;
j = 2;
for (; j < i; j++)
{
if (i % j == 0)
s += j;
}
if (s == n)
{
printf("%d ", i);
k++;
}
}
if (k == 0)
printf("no such numbers");
return 0;
}
有用请设置最佳答案
|
|