如何保持比较整数对,直到用户输入没有数组的 0?
How to keep comparing pairs of integers until user inputs 0 without array?
这是一个检查互质对的程序。
我正在尝试编写一个程序来接收整数输入,直到用户输入 0,这很容易在数组的帮助下解决(我已经用数组完成了),因为只有一个值阅读和检查的时间。
使用数组很简单:
for(i = 0; i < n-1; i++)
然后比较 v[i]
和 v[i+1]
不过,我正在尝试在没有数组的情况下应用这种精确检查算法,
读取两个值并比较它们,不知何故,循环仅在我多次输入 0 时结束,有时是两次,有时是三次。
#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;
}
我尝试过的事情:
1 -
while(num1 != 0 || num2 != 0) /*using this inside the while(), also tried
changing the operator to &&, without a condition and a break inside the
body*/
2 -
尝试了 while(flag != 0)
更改 if(num1 == 0 || num2 == 0)
,也将运算符更改为 &&
,但它仍然是一样的,或者对我来说没有意义。
我需要的程序是在任何输入0处停止,例如:
25 27 12 24 11 13 0
程序应该停在那里并告诉我有多少对是互质数,但它只会在我再输入 0 两次时停止。
What I need from the program is to stop at any input 0
scanf("%d %d", &num1, &num2);
在您输入 2 个数字之前一直处于阻塞状态
如果您想在第一个数字为 0 时停止而不必读取第二个数字,则必须执行 2 scanf
scanf("%d", &num1);
if(num1 == 0)
break;
scanf("%d", &num2);
if(num2 == 0)
break;
问题是,在你测试 15 和 63 之后,你把它们都 扔掉了,所以 63 和 43 没有机会被测试。而不是总是阅读 两个个数字,只读一个,也只读一个,按照[=11] =]
read a
while ()
read b
gcd(a, b), etc
a = b
这是一个检查互质对的程序。
我正在尝试编写一个程序来接收整数输入,直到用户输入 0,这很容易在数组的帮助下解决(我已经用数组完成了),因为只有一个值阅读和检查的时间。 使用数组很简单:
for(i = 0; i < n-1; i++)
然后比较 v[i]
和 v[i+1]
不过,我正在尝试在没有数组的情况下应用这种精确检查算法, 读取两个值并比较它们,不知何故,循环仅在我多次输入 0 时结束,有时是两次,有时是三次。
#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;
}
我尝试过的事情:
1 -
while(num1 != 0 || num2 != 0) /*using this inside the while(), also tried
changing the operator to &&, without a condition and a break inside the
body*/
2 -
尝试了 while(flag != 0)
更改 if(num1 == 0 || num2 == 0)
,也将运算符更改为 &&
,但它仍然是一样的,或者对我来说没有意义。
我需要的程序是在任何输入0处停止,例如:
25 27 12 24 11 13 0
程序应该停在那里并告诉我有多少对是互质数,但它只会在我再输入 0 两次时停止。
What I need from the program is to stop at any input 0
scanf("%d %d", &num1, &num2);
在您输入 2 个数字之前一直处于阻塞状态
如果您想在第一个数字为 0 时停止而不必读取第二个数字,则必须执行 2 scanf
scanf("%d", &num1);
if(num1 == 0)
break;
scanf("%d", &num2);
if(num2 == 0)
break;
问题是,在你测试 15 和 63 之后,你把它们都 扔掉了,所以 63 和 43 没有机会被测试。而不是总是阅读 两个个数字,只读一个,也只读一个,按照[=11] =]
read a
while ()
read b
gcd(a, b), etc
a = b