一道程序竞赛题,看了一下午没理出头绪,有高手帮忙看一下呗……
请编程打印如下面图形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; } }