有问题!
这个题目请写一段程序计算两个数之间的素数。
输入格式:
为两个正整数a和b,(1<a,b<1000)。
输出格式:
当a小于b时,计算开区间(a,b)中的所有素数,并按升序输出,当a>=b时,或该区间没有素数则输出error。
注意:输出的素数之间用一个空格分隔,最后一个素数后面没有空格。
输入样例:
10 20
输出样例:
11 13 17 19
怎么做到让最后一个素数后面没有空格呀!!
我的代码
#include <stdio.h>
int main()
{
int a,b,i,m,flag1=1,flag2=1; scanf("%d %d",&a,&b);
if(a < b)
{
for(i = a+1;i < b;i++)
{
flag1 = 1;//重置
for(m = 2;m <= i/2;m++)
{
if(i%m == 0)//判断i是否为素数.
{
flag1 = 0;//要在循环中保持flag1的合理性
break;
}
}
if(flag1)//结果输出,若i是素数,则输出.
{
printf("%-3d",i); flag2 = 0;
}
}
flag2 == 1 ? printf("error") : flag2 = 1;//条件判断用双==
}
else
{
printf("error");
}
return 0;
} 你可以在输出素数之前判断是否为最后一个素数,如果是最后一个素数,则不输出空格。以下是修改后的代码:
#include <stdio.h>
int main()
{
int a, b, i, m, flag1 = 1, flag2 = 1;
scanf("%d %d", &a, &b);
if (a < b)
{
for (i = a + 1; i < b; i++)
{
flag1 = 1; //重置
for (m = 2; m <= i / 2; m++)
{
if (i % m == 0) //判断i是否为素数.
{
flag1 = 0; //要在循环中保持flag1的合理性
break;
}
}
if (flag1) //结果输出,若i是素数,则输出.
{
if (flag2)
{
printf("%d", i);
flag2 = 0;
}
else
{
printf(" %d", i);
}
}
}
flag2 == 1 ? printf("error") : flag2 = 1; //条件判断用双==
}
else
{
printf("error");
}
return 0;
}
在这个修改后的代码中,我们使用了一个 flag2 变量来判断是否为第一个素数。如果是第一个素数,则直接输出,如果不是第一个素数,则在输出之前加上一个空格。这样就可以保证最后一个素数后面没有空格了。 你可以在输出每个素数之前判断一下是否为第一个素数,如果是第一个素数就不需要输出空格,否则输出一个空格。
下面是修改后的代码:
#include <stdio.h>
int main() {
int a, b, i, m, flag1 = 1, flag2 = 1;
scanf("%d %d", &a, &b);
if (a < b) {
for (i = a + 1; i < b; i++) {
flag1 = 1; // 重置
for (m = 2; m <= i / 2; m++) {
if (i % m == 0) // 判断i是否为素数
{
flag1 = 0; // 要在循环中保持flag1的合理性
break;
}
}
if (flag1) // 结果输出,若i是素数,则输出.
{
if (flag2)
flag2 = 0;
else
printf(" ");
printf("%d", i);
}
}
if (flag2)
printf("error");
} else {
printf("error");
}
return 0;
}
这样修改后,最后一个素数之后就不会有多余的空格了。
希望能帮到你!如有更多问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} 本帖最后由 AFUL 于 2023-10-17 20:56 编辑
#include <math.h>
#include <stdio.h>
bool is_prime_num(int &a){
int b = sqrt(a);
for(int i = 2; i <= b; i++)
if(a % i == 0)
return false;
return true;
}
int main() {
int m, n, i;
bool flag = false;
scanf("%d %d", &n, &m);
if(n < 0) n = 0;
if (n < 2 && m > 2) {
printf("%d", 2);
flag = true;
n = 2;
}
for(i = n+1; i < m; i+=2){
if(is_prime_num(i)) {
flag? printf(" %d", i) : printf("%d", i);
flag = true;
}
}
if (!flag)
printf("error");
return 0;
}
页:
[1]