标题:等腰三角形
本题目要求你在控制台输出一个由数字组成的等腰三角形。
 具体的步骤是:
 1. 先用1,2,3,...的自然数拼一个足够长的串
 2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
 比如,当三角形高度是8时:
       1
       2 1
      3   8
     4     1
    5       7
   6         1
  7           6
 891011121314151
显示不正确时,参看:p1.png
输入,一个正整数n(3<n<300),表示三角形的高度
 输出,用数字填充的等腰三角形。
为了便于测评,我们要求空格一律用"."代替。
例如:
 输入:
 5
程序应该输出:
 ....1
 ...2.1
 ..3...2
 .4.....1
 567891011
再例如:
 输入:
 10
程序应该输出:
 .........1
 ........2.2
 .......3...2
 ......4.....2
 .....5.......1
 ....6.........2
 ...7...........0
 ..8.............2
 .9...............9
 1011121314151617181
  
再例如:
 输入:
 15
程序应该输出:
..............1
 .............2.3
 ............3...2
 ...........4.....3
 ..........5.......1
 .........6.........3
 ........7...........0
 .......8.............3
 ......9...............9
 .....1.................2
 ....0...................8
 ...1.....................2
 ..1.......................7
 .1.........................2
 21314151617181920212223242526
 资源约定:
 峰值内存消耗(含虚拟机) < 256M
 CPU消耗  < 1000ms
 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
注意:
 main函数需要返回0;
 只使用ANSI C/ANSI C++ 标准;
 不要调用依赖于编译环境或操作系统的特殊函数。
 所有依赖的函数必须明确地在源文件中 #include <xxx>
 不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
需要进行数据分析:
输入n代表数据总共n行,每一行的分析:
第一部分为“.”
第二部分为“数据”
第三部分为“.”
第四部分为“数据”
第一行和最后一行稍微特殊,可以考虑合并或者单独处理。
分析可以看出第一部分的.和行号的关系为n-i(总共n行,i表示当前行数)
第二部分的数据为第一位置上的数(因为每一个数据可能是一位、二位或者三位数,所以只能考虑一个位置),需要将数据进行预处理,将多位数反向取数放到一个数组中,后续使用按位置取对应数据即可。
第三部分的.个数为(2*i-1)
第四部分的数据倒序取即可。
最后一个位置的数通过计算可以看出等于n-1+2n-1+n-2,即为4n-4位置的数据。
实验代码:
#include  <stdio.h>
 int main()
 {
     int i,j,k,n,tmp,temp[10000],l,a[10000],len=0;
     scanf("%d",&n);
     
     for(i=1;i<1200;i++){
         tmp=i;
         l=0;
         while(tmp>=1){
             temp[l]=tmp%10;
             tmp=tmp/10; 
             l++;
         }//取出每一位 
         for(int j=l-1;j>=0;j--){
             a[len]=temp[j];
             len++;
         }//当有很多位时,倒序
         if(len>=4*n-3)
             break;
     }
 //    数据验证 
 //    for(i=0;i<len;i++)
 //    {
 //        printf("%d ",a[i]);
 //    }
     for(i=0;i<n-1;i++)
     {
     //    第一部分输出. 
         for(j=n-1;j>i;j--)
         {
             printf(".");
          } 
     //    第二部分输出数据
         printf("%d",a[i]);
          
     //    第三部分输出. 
         for(j=0;j<2*i-1;j++)
         {
             printf(".");
         }
     //    第四部分输出最后一位数据
         if(i!=0)
              printf("%d",a[4*n-4-i]);
      
         printf("\n"); 
     } 
     //最一行单独处理
     for(k=0;k<2*n-1;k++)
     {
         printf("%d",a[n+k-1]);
     }
     
 }

欢迎留言探讨。










