【问题标题】:Half pyramid of numbers半数金字塔
【发布时间】:2015-07-01 13:47:14
【问题描述】:

我需要以金字塔模式生成以下奇数输出。 输出会像

1
3 3
5 5 5
7 7 7 7

我编写了以下代码。我应该修改哪一部分?

#include<stdio.h>
int main()
{
  int num,r,c;
  printf("Enter structure number : ");
  scanf("%d", &num);

      for(r=1; r<=num; r++)
      {
          if(r%2 != 0){
              m=1;
             for(c=1; c<=m; c++)
                printf("%d",r);
             printf("\n");
      }
  }
  return 0;
}

电流输出:

目前的输出是-

1
2 2
3 3 3
4 4 4 4
5 5 5 5 5

【问题讨论】:

  • 它的当前输出是多少?现在的代码有什么问题? (我还没有运行甚至阅读代码;这是您应该在问题中解释的内容。)
  • printf("%d",r); 更改为printf("%d",(2*r)-1);
  • @TanjimaTani 请不要以使现有答案看起来无效的方式编辑问题。

标签: c loops for-loop printf


【解决方案1】:

你可以写:

  for(r=1; r <= num; r+=2) //we only need odd numbers
  {
      times = r/2 + 1; //how many times to print odd number
      for(c=1; c <= times; c++)
          printf("%d",r); //print one character at a time
      printf("\n");
  }

如果您只遍历奇数,您可能会更好地理解它。我目前正在这样做并计算我需要打印多少次该数字,然后我只是打印它与times 一样多次。

【讨论】:

    【解决方案2】:

    此代码中有 2 个错误。 m 没有在任何地方声明。 你正在运行一个无限循环

    试试这个。

    #include<stdio.h>
    int main()
    {
      int num,r,c,m;
      printf("Enter structure number : ");
      scanf("%d", &num);
    
          for(r=1; r<=num; r++)
          {
              if(r%2 != 0){
                  m=r;
                 for(c=1; c<=m; c++)
                    printf("%d",r);
                 printf("\n");
          }
      }
      return 0;
    }
    

    【讨论】:

      【解决方案3】:

      在您的代码中,而不是

        m=1;
      

      你应该写

       m= ( (r/2) + 1);
      

      否则,您将始终只在 for 循环中迭代一次。

      【讨论】:

        【解决方案4】:

        一些小的修改,它的工作原理:

        #include<stdio.h>
         int main()
         {
         int num,r,c,m=0;
         printf("Enter structure number : \n");
         scanf("%d", &num);
        
          for(r=1; r<=num; r++)
          {
              if(r%2 != 0){
                  m++;
                 for(c=1; c<=m; c++)
                    printf("%d ",r);
                 printf("\n");
          }
         }
         return 0;
        }
        
        • m 未声明
        • printf 消息末尾的换行
        • m 每次奇数迭代递增
        • 打印的 unmbers 之间的空间

        这是demo

        【讨论】:

          【解决方案5】:

          内部的for 循环应该是这样的:

          for(c=1; c <= r/2; c++)
                      printf("%d ",r);
          

          想一想。你想在每一行打印一个四舍五入的r/2 数字,对吧?

          喜欢:
          3/2 -> 1.5 -rounded-> 1 -> 打印:3
          5/2 -> 2.5 -rounded-> 2 -> 打印:5 5
          等等。

          您可以在ideone.com 上运行代码

          【讨论】:

            【解决方案6】:
            #include<stdio.h>
            int main()
            {
                int num,r,c;
                printf("Enter structure number : ");
                scanf("%d", &num);
            
                for(r=1; r<=num; r++)
                {
                    if(r%2 != 0){
                        int m=r;
                        for(c=1; c<=m; c++)
                        {
                            if(c%2 != 0){
                                printf("%d ",r);
                            }
                        }
                        printf("\n");
                    }
                }
              return 0;
            }
            

            测试

            sh-4.3# main                                                                                                                                                                          
            Enter structure number : 9                                                                                                                                                            
            1                                                                                                                                                                                     
            3 3                                                                                                                                                                                   
            5 5 5                                                                                                                                                                                 
            7 7 7 7                                                                                                                                                                               
            9 9 9 9 9   
            

            【讨论】:

              【解决方案7】:

              在第 1 行,您应该打印 1。
              在第 2 行,您应该打印 3。
              在第 3 行,您应该打印 5。
              在第 4 行,您应该打印 7。
              .............................
              .............................
              在第 n 行,您应该打印 2*n-1

              你可以检查一下:

               #include<stdio.h>
              
              
              int main()
              {
                  int num,r,c;
                  printf("Enter structure number : ");
                  scanf("%d", &num);
                  for(r=1; r<=num; r++)
                  {
                      for(c=1; c<=r; c++)
                          printf("%d",2*r-1);
                      printf("\n");
                  }
                  return 0;
              }
              

              【讨论】:

                【解决方案8】:

                请看这个:

                for(r=1; r<=num; r+=2) // increment by 2, work for r= 1,3,5,7...
                {
                    for(c=1; c<=r; c+=2)// increment by 2
                        printf("%d",r);
                     printf("\n");
                }
                

                如果您想要 1、3、5、7 等备用数字...只需将值增加 2

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2023-01-26
                  • 1970-01-01
                  • 2021-12-30
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多