#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=0,j,k,n,t,a[30];//最多30组数据,如果更多组,把30改成更大的数
while(scanf("%d",&n)!=EOF) //读取多组输入数据存放在数组a中
a[i++] = n;
n = i; //n记录组数
for (k = 0;k<n;k++)//遍历所有组
{
for (i=1;i<=a[k];i++) //对每一组数据,输出a[k]*a[k]的矩阵
{
t = 1; //没一行都是从1开始
for(j=1;j<=a[k];j++)
{
if(j<i) //列数小于行数的时候,显示数字,并将数字+1
{
printf("%3d",t);
t++;
}else
printf("%3d",t); //列数大于行数的时候,直接显示数字,数字不再+1
}
printf("\n"); //每行结束后输出换行符
}
}
return 0;
}
抱歉没时间写代码,不过我能提供一下我的思路给你
需要用到二位数组
1,创建一个array[n][n]的数组。
2,然后用循环进行赋值,至于赋值多少,我想了一个简单的方法,
比较两个下标的大小,将值赋为较小的那个下标数加1。
3,遍历输出(记得换行)。
// caimi5.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
// 用于存放的数组
int iDuoGen[200] = {0};
// 输入多组
printf("输入多组 每组间用回车分隔 输入“0回车”结束\n");
int in; // 输入临时变量
int iCount = 0; // 输入计数
do
{
scanf_s("%d", &in);
if (in <0 ||in >30)
{
continue; //如果在范围之外 不记录 进行下一次输入
}
iDuoGen[iCount] = in;
iCount++;
printf_s("OK,还可以输入%d组\n", 200 - iCount);
} while (in != 0 || 200 - iCount ==0);
for (int i = 0; i < iCount; i++)
{
int iTemp = iDuoGen[i];
for (int j = 1; j <= iTemp; j++)
{
for (int k = 1; k <= iTemp; k++)
{
int iSubTemp = k < j ? k : j; // 选择两个脚标中较小的那一个
if (iSubTemp>=10) // 是个两位数 print后跟一个空格 凑成**3个位**
{
printf_s("%d ", iSubTemp);
}
else// 是个一位数 print后跟两个空格 凑成**3个位**
{
printf_s("%d ", iSubTemp);
}
}
printf_s("\n");
}
}
_tsystem(L"pause");
return 0;
}