停止打印重复的算术表达式

时间:2018-10-12 00:03:23

标签: c

我用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。

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);
}