回 帖 发 新 帖 刷新版面

主题:T T菜鸟求助,找不出错误……

下面这段是我编的
#include "stdio.h"
#include "math.h"
int main(void)
{
    int count, i, j, k, m, n;
    int ri,repeat;
  
    scanf("%d", &repeat);
    for(ri = 1; ri <= repeat;ri++){
        scanf("%d%d", &m, &n);
        printf("primes:\n");
        count=0;
        for(i=m;i<=n;i++){
            k=i;
            
            for(j=2;j<=k;j++){
                if(k%j==0) 
                    break;
                if(j>k/2){
                    printf("%d ", i);
                    count++;
                }
            }
            
            if(count==6){
                  printf("\n");
                  count=0;}
            
        }
    }
}

build出来是这么一段东西
【m=1,n=35时】
3 5 5 7 7 7
11 11 11 11 11 13 13 13 13 13 15 17 17 17 17 17 17 19 19 19 19 19 19 19 19
 19 23 23 23 23 23 23 23 23 23 23 23 29 29 29 29 29 29 29 29 29 29 29 29 29 29 3
1 31 31 31 31 31 31 31 31 31 31 31 31 31 31 

题目要求是这样的……
输入:
2              (repeat=2)
1 35           (m=1, n=35)
2 10        (m=2,n=10)
输出:
primes:     (1到35之间的素数)
2 3 5 7 11 13
17 19 23 29 31
primes:     (2到10之间的素数)
2 3 5 7 

麻烦哪位高手帮忙看下哪里错了
在deburg的时候i=2直接跳过了为啥T T……

回复列表 (共3个回复)

沙发

请使用单步调试,可以查明原因

板凳


你在count++后面加个break,就可以解决这个问题了,但质数2不能显示出来。我在你的基础上做了小修改可以达到你要的预期效果。代码如下:
#include "stdio.h"
#include "math.h"

int IsPrimes(int num);

int main(void)
{
    int count, i, j, k, m, n;
    int ri,repeat;
  
    scanf("%d", &repeat);
    for(ri = 1; ri <= repeat;ri++){
        scanf("%d%d", &m, &n);
        printf("primes:\n");
        count=0;
        for(i=m;i<=n;i++){
            
            if(IsPrimes(i))
            {
                printf("%d ", i);
                count++;
            }

            if(count==6){
                  printf("\n");
                  count=0;}
            
        }
        printf("\n");
    }
}
 
int IsPrimes(int num)   //判断num是是否为素数,是返回1,不是返回0;
{
    int i, flag = 1;

    if(num==1) flag =0;

    for(i=2; i<=num/2; i++)
    {
        if(num%i==0)
        {
            flag = 0;
            return flag;
        }
    }

    return flag;
}

3 楼

// primes.cpp : 定义控制台应用程序的入口点。
//

#include "stdio.h"
#include "stdafx.h"
#include "math.h"
int main(void)
{
    int count, i, j, k, m, n,flag=0;
    int ri,repeat;

    scanf("%d", &repeat);
    for(ri = 1; ri <= repeat;ri++)
    {
        scanf("%d%d", &m, &n);
        printf("primes:\n");
        count=0;
        for(i=m;i<=n;i++)
        {
            k=i;

            for(j=2;j<=k/2;j++)
            {
                if(k%j==0)
                {
                    flag=0;
                    break;
                }
                else
                {
                    flag=1;

                }
            }

            if (flag==1)
            {
                printf("%d ", i);
                count++;
            }

            if(count==6)
            {
                printf("\n");
                count=0;
            }

        }
    }

}

我来回复

您尚未登录,请登录后再回复。点此登录或注册