鱼C论坛

 找回密码
 立即注册
查看: 1760|回复: 3

[已解决]有问题!

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

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

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

x
这个题目
请写一段程序计算两个数之间的素数。

输入格式:
为两个正整数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;
}
最佳答案
2023-10-17 20:40:40
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-17 20:07:17 | 显示全部楼层
你可以在输出素数之前判断是否为最后一个素数,如果是最后一个素数,则不输出空格。以下是修改后的代码:
#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 变量来判断是否为第一个素数。如果是第一个素数,则直接输出,如果不是第一个素数,则在输出之前加上一个空格。这样就可以保证最后一个素数后面没有空格了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-17 20:07:18 | 显示全部楼层
你可以在输出每个素数之前判断一下是否为第一个素数,如果是第一个素数就不需要输出空格,否则输出一个空格。

下面是修改后的代码:
#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;}
这样修改后,最后一个素数之后就不会有多余的空格了。

希望能帮到你!如有更多问题,请随时提问。

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

使用道具 举报

发表于 2023-10-17 20:40:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 19:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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