一道程序竞赛题,看了一下午没理出头绪,有高手帮忙看一下呗……
请编程打印如下面图形1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
输入:
测试例子中,一行给出一个整数N,(0<N<100);
输出:
每一个测试例子,输出相对应的字符图形
例如输入:
3
5
对应输出:
1 3 6
2 5
4
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
程序代码:#include <stdio.h>
#include <string>
using namespace std;
int a[100][100] = {0};
int main()
{
int i,j,n;
while(EOF != scanf("%d",&n))
{
int k = 1;
for(i = 0;i<n;i++)
{
int r = i;
for(j = 0;j<=i;j++)
{
a[r][j] = k++;
r--;
}
}
for(i = 0;i<n;i++)
{
for(j = 0;j<n-i-1;j++)
{
printf("%d ",a[i][j]);
}
printf("%d\n",a[i][j]);
}
}
return 0;
} 这个题目思路为从左上角开始向右下角打印 打印规律为每一次打印的个数为所在行数 并且满足i+j = 行数
程序代码:#include<stdio.h>
#include<stdlib.h>
void main()
{
int m;
int i,j;
int **a;
char flag='Y';
while(flag=='Y')
{
printf("Please input a integer: ");
scanf("%d",&m);
a=(int **)calloc(m+1,sizeof(int *));
for(i=0; i<m; i++)
a[i]=(int *)calloc(m+1,sizeof(int ));
a[0][0]=1;
for(i=1; i<m; i++)
{
a[0][i]=i+1+a[0][i-1];
a[i][0]=i+a[i-1][0];
}
for(i=1; i<m; i++)
for(j=1; j<m-i; j++)
a[i][j]=a[i-1][j]+j+i;
for(i=0; i<m; i++)
{
for(j=0; j<m-i; j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("Do you want to continue?If yes,press Y,if not,press N.\n");
getchar();
scanf("%c",&flag);
if(flag=='Y')
continue;
else break;
}
}