C 如何在没有数组的情况下一直比较整数对,直到用户输入0为止?
这是一个检查共素数对的程序 我试图编写一个程序来接收整数的输入,直到用户输入0为止,这在数组的帮助下很容易解决。我已经用数组完成了,因为一次只有一个值需要读取和检查。 对于阵列,它只是: fori=0;iC 如何在没有数组的情况下一直比较整数对,直到用户输入0为止?,c,input,multiple-conditions,C,Input,Multiple Conditions,这是一个检查共素数对的程序 我试图编写一个程序来接收整数的输入,直到用户输入0为止,这在数组的帮助下很容易解决。我已经用数组完成了,因为一次只有一个值需要读取和检查。 对于阵列,它只是: fori=0;i
#include <stdio.h>
int gcd1(int a, int b) //function containing Euclid's algorithm
{
while (b != 0)
{
int temp = a%b;
a = b;
b = temp;
}
return a;
}
int main(int argc, char * argv[])
{
int num1, num2; /* both of these vars would otherwise have a non-zero
value if I was using Try Nr.1 written in bold below was applied */
int cate = 0, flag = 1;
while(1)
{
scanf("%d %d", &num1, &num2);
if(num1 == 0 && num2 == 0)
{
break;
}
if(gcd1(num1, num2) == 1) //check if pair is co-prime
{
cate++;
}
}
printf("%d\n", cate);
return 0;
}
二,-
试了一会儿0更改ifnum1==0 | | num2==0,将运算符更改为&&但它仍然是相同的,或者对我来说没有意义
我需要程序在任何输入0处停止,例如:
25 27 12 24 11 13 0
程序应该停在那里,告诉我有多少对是同素数,但它只在我再输入两次0时停止
我需要从程序中得到的是在任何输入0处停止
scanf%d%d、&num1、&num2;正在阻止,直到输入2个数字
如果要在第一个数字为0时停止,而不必读取第二个数字,则必须进行2次扫描
问题是,在你测试了15对63之后,你把它们都扔掉了,所以63对43没有机会被测试。与其总是读两个数字,不如只读一个,然后也只扔掉一个,按照
read a
while ()
read b
gcd(a, b), etc
a = b
从检查什么开始。如果num1==0 | | num2==0,则中断;在数组的帮助下很容易解决这个问题数组在哪里?你的意思是说不需要阵列的帮助就可以轻松解决这个问题吗?如果是这样的话,这是绝对正确的。因为你描述了一个I/O问题,使用一个数组和两个独立的标量变量作为I/O目标与此无关。我的意思是我解决了同样的问题,但使用了一个数组,这几乎没有这么难。这在某种程度上起到了作用,但是显然是不可靠的,因为它不能与问题提供的测试输入一起工作。@RamiRaghfan 15 63不是共同引物,也不是43和129,也不是55和15,为什么期望3?因为gcd15,63=1,gcd129,55=1,和gcd15,4=1。这个算法应该将每个数字与其旁边的数字进行比较。@RamiRaghfan gcd15,63是3!抱歉,我的意思是gcd63,43等于1,而不是在我上面的评论中写gcd15,63。但是这样,如果我使用数组,它将根据所有其他输入而不是arr[i],arr[i+1]测试第一个输入。这就是我想要的。每个数字都有它的邻居。@RamiRaghfan No。注意a=b赋值。现在第二个输入扮演第一个输入的角色,等等。
scanf("%d", &num1);
if(num1 == 0)
break;
scanf("%d", &num2);
if(num2 == 0)
break;
read a
while ()
read b
gcd(a, b), etc
a = b