我有用于查找范围内的素数的代码。
问题是删除最后一个逗号。
#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
答案 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;
}
}