如何删除范围内逗号分隔的素数的最后一个逗号?

时间:2017-09-16 11:44:18

标签: c loops primes

我有用于查找范围内的素数的代码。

问题是删除最后一个逗号。

#include<stdio.h>

int main()
{
    int a,b,i,x,c,f=1;
    scanf("%d%d",&a,&b);
    for(x=a;x<=b;(x++,f=0))
    {

        for(i=2;i<x;i++)
        {
            if(x%i==0)
            {
                 f=1;
            }
        }

        if(f==0)
            printf("%d,",x);
     }
  }

但输出中包含一个额外的逗号。 例如

  

2,3,5,7,

而预期的输出是

  

2,3,5,7

11 个答案:

答案 0 :(得分:2)

您可以直接决定在数字之间打印什么

,而不是标记

请注意,只要f设置为1

,就可以突破内部循环
let user = try JSONSerialization.jsonObject(with: jsonDictionary) as? [String: Any]

答案 1 :(得分:1)

#include<stdio.h>

int main()
{
    int a,b,i,x,c,f=1;
    char backspace = 8;

    scanf("%d%d",&a,&b);
    for(x=a;x<=b;(x++,f=0))
    {

        for(i=2;i<x;i++)
        {
            if(x%i==0)
            {
                 f=1;
            }

        }
        if(f==0)
           printf("%d,",x);
     }
     printf("\b"); // or printf("%c", backspace);
  }

答案 2 :(得分:1)

添加另一个标志,只是一个简单的计数器,告诉您是否第一次打印然后检查标志以决定要打印的内容,例如

#include<stdio.h>

    int main()
    {
        int a,b,i,x,c,first=0,f=1;
        scanf("%d%d",&a,&b);
        for(x=a;x<=b;(x++,f=0))
        {

            for(i=2;i<x;i++)
            {
                if(x%i==0)
                {
                     f=1;
                }
            }

            if(f==0)
                {
                    if(first==0){
                        printf("%d",x);
                    }else{
                        printf(",%d",x);
                    } 
                    first++
                }
         }

  }

答案 3 :(得分:1)

使用标记来检测第一次出现printf()并打印第一个数字,而不是,。对于连续数字打印,在,

之前
#include<stdio.h>

int main()
{
    int a,b,i,x,c,f=1,flag=0;//Flag to mark first occurrence
    scanf("%d%d",&a,&b);
    for(x=a;x<=b;(x++,f=0))
    {

        for(i=2;i<x;i++)
        {
            if(x%i==0)
            {
                 f=1;
                 break;// Once the condition fails can break of the for loop as it fails for the prime number condition at the first case itself
            }

        }
            if(f==0)
            {
            if(flag==0)
            {//Check if it is first time
                printf("%d",x);
                flag = 1;//If so print without ',' and set the flag
            }
            else
                printf(",%d",x);// On next consecutive prints it prints using ','
            }
        }
  }

当只打印一个数字时,此方法也可以避免,

例如:当输入为2和4时,它只打印3而不是3,

答案 4 :(得分:0)

下面给出了最小循环的奇数最佳实践;

#include<stdio.h>
int main()
{
    int a,b,i,x,c,f=1;
    scanf("%d%d",&a,&b); 

    while (a < b) 
    {
        if ( (a%2) == 1) {
           printf("%d", a);
           if ( (a + 1) < b && (a + 2) < b)
               printf(",");
        }
        a = a + 1;
    } 
}

请从网站上查看 http://rextester.com/MWNVE38245

答案 5 :(得分:0)

将结果存储到缓冲区中,完成后打印缓冲区:

#include <stdio.h>
#include <errno.h>

#define RESULT_MAX (42)

size_t get_primes(int * result, size_t result_size, int a, int b)
{
    int i, x, f = 1;
    size_t result_index = 0;

    if (NULL == result) || (0 == result_size) || ((size_t) -1 == result_size))
    {
        errno = EINVAL;
        return (size_t) -1;
    }

    for (x = a; x <= b; (x++, f = 0))
    {
        for (i = 2; i < x; i++)
        {
            if (x % i == 0)
            {
                 f = 1;
                 break;
            }
        }

        if (f == 0)
        {
            result[result_index] = x;
            ++result_index;
            if (result_size <= result_index)
            {
                fprintf(stderr, "Result buffer full. Aborting ...\n");
                break;
            }
        }
    }

    return result_index;
}

int main(void)
{
    int a = 0, b = 0;
    int result[RESULT_MAX];

    scanf("%d%d", &a, &b);

    {
        size_t result_index = get_primes(result, RESULT_MAX, a, b);

        if ((size_t) -1 == result_index)
        {
            perror("get_primes() failed");
        }
        else if (0 == result_index)
        {
            fprintf(stderr, "No primes found.\n");
        }
        else
        {
            printf("%d", result[0]);

            for (size_t i = 1; i < result_index; ++i)
            {
                printf(", %d", result[i]);
            }
        }
    }

    return 0;
}

此示例使用一个简单的固定大小的缓冲区,如果这不适合您的需求,请用动态缓冲区替换它。

答案 6 :(得分:0)

这更像是一个“与语言无关”的问题:“如何在没有最终逗号的情况下输出以逗号分隔的列表?”它并不是特别关于素数。

您似乎在考虑将您列为一系列[prime comma]单位。事实并非如此。考虑它的一个更好的方法是作为列表的头部单prime,然后是重复的[comma prime]单位的尾部。

一些伪代码来说明一般的想法:

outputList(theList)
  separator = ", "
  output(theList.firstItem())
  while (theList.hasMoreItems())
    output(separator)
    output(theList.nextItem())
  endwhile
return

答案 7 :(得分:0)

/*  this is just logic */

    for(i=2;i<=n;i++)
    {
        k=0;
        for(j=2;j<=i/2;j++)
        {
            if(i%j==0)
                k=1;
        }
        if(k==0)
        {
            c++;
            c++;
        }

    }

     System.out.println(c);
     for(i=2;i<=n;i++)
        {
            k=0;
            for(j=2;j<=i/2;j++)
            {
                if(i%j==0)
                    k=1;
            }
            if(k==0)
            {
                System.out.print(i);
                b++;
                if(b!=c-1)
                    {
                    System.out.print(",");
                    b++;
                }
            }

        }

    }

}

答案 8 :(得分:0)

//comma separated values


#include <bits/stdc++.h>
using namespace std;

int Prime(int a, int n){
    bool prime[n+1];
    memset(prime,true,sizeof(prime));
    for(int p=2;p*p<=n;p++){
        if(prime[p]==true){
            for(int i=p*p ; i<=n; i+=p ){
                prime[i] = false;
            }
        }
    }

    for(int i = 2;i<= n;i++){
        if(i==2) cout<<i;    // here is the logic  first print 2 then for other numbers first print the comma then the values 
        else if(prime[i]) cout<<","<<i;
    }

}
int main(){
    int a =2 ;
     int n = 30; 
     Prime(a , n);

}

答案 9 :(得分:0)

#include <stdio.h>

int main()
{
    int i, j, n, count;
    scanf("%d", &n);

    for(i=2; i<n; i++) 
    {
        count=0;
        for(j=2; j<n; j++)
        {
            if(i%j==0) 
             count++;
        }
        if(count==1)
          printf("%d," i);

    }
    printf("\b \b");        
}

\ b是无损退格键。它向后移动光标,但不删除其中的内容,而是将其替换。对于破坏性的退格键, 使用“ \ b \ b”,即一个空格,一个空格和另一个空格。

此程序将所有素数打印到给定数字,并用逗号分隔

答案 10 :(得分:-1)

包括

int main()
{
    int a,b,i,x,c,first=0,f;
    scanf("%d",&b);
    for(x=2;x<=b;x++)
    {
        for(i=1;i<=x;i++)
        {
            if(x%i==0)
            {
                 f++;
            }
        }

        if(f==2)
            {
                if(first==0){
                    printf("%d",x);
                }else{
                    printf(",%d",x);
                } 
                first++;
            }
            f=0;
     }

}