我用C语言编写了此程序,以查找等于数字n的三个数字的所有和:
#include<stdio.h>
int main ()
{
int n;
printf("n:");
scanf("%d", &n);
int a,b,c;
a=0;
while(a<n)
{
a++;
b = 0;
while (b < n)
{
b++;
c = 1;
while (c < n)
{
if(a + b + c == n){
printf("%d + %d + %d = %d\n", a , b ,c ,n);
c++;
}
if (a + b + c != n){
c++;
}
}
}
}
}
如何阻止它打印重复的算术表达式,例如1 +1 + 3和3 +1 + 1。
答案 0 :(得分:0)
我会建议与Ry-♦在您的问题的评论中建议的内容类似的内容。 这是代码中的样子:
#include<stdio.h>
int main ()
{
int n;
printf("n:");
scanf("%d", &n);
int a,b,c;
a=0;
while(a<n)
{
a++;
b = a; /* start b at a to prevent duplicate sequences */
while (b < n)
{
b++;
c = b; /* start c at b to prevent duplicate sequences */
while (c < n)
{
if(a + b + c == n){
printf("%d + %d + %d = %d\n", a , b ,c ,n);
c++;
}
if (a + b + c != n){
c++;
}
}
}
}
}
在您的问题的注释中,也建议使用for循环。这将使您的代码更加紧凑和易于阅读:
#include<stdio.h>
int main ()
{
int n;
printf("n:");
scanf("%d", &n);
int a,b,c;
for(a=0;a<n;a++)
for(b=a;b<n;b++)
for(c=b;c<n;c++)
if(a + b + c == n)
printf("%d + %d + %d = %d\n", a , b ,c ,n);
}