从1~N*N的各个数依次如下规则存放: (1) 1在第一行中间一列;
(2) 每一个数存放的行比前一个数的行数减一,列数加一(如上的三阶方阵5在4的上一行,后一列);
(3) 如果上一个数在第一行,则下一个数在最后一行,列数加一; (4) 如果上一个数在最后一列,则下一个数在第一列,行数减一;
(5) 如果按上述规则确定的位置已经有数,或上一个数在第一行第N列,则下一个数放在上一个数的正下方。
输入
输入包含多组数据,每组为一个小于100的正奇数。
输出
对于每个输入的N,输出N阶魔方阵;两组数据之间用一个空行分隔。方阵中每行每两个数之间有一个空格,行首和行末没有多余的空格。
样例输入
3
样例输出
8 1 6 3 5 7 4 9 2
解答:
#include
int i,j,k,n,row=1,col,temp_row,temp_col; int sqrt[100][100]={0}; scanf(\col=(n+1)/2;
for(i=1;i<=n*n;i++) {
sqrt[row][col]=i; temp_row=row; temp_col=col;
if(row==1&&col==n)
row++; else {
row--; col++; if(row==0) row=n; if(col>n) col=1;
if(sqrt[row][col]!=0) {
row=temp_row+1; col=temp_col; if(row>n) row=1; } } } j=1;
while(j<=n) { k=1;
while(k<=n) {
if(k%n==0)
printf(\ else
printf(\ k++; } j++; }
for(;scanf(\{
printf(\
int sqrt[100][100]={0}; col=(n+1)/2;
for(i=1;i<=n*n;i++) {
sqrt[row][col]=i; temp_row=row; temp_col=col;
if(row==1&&col==n) {
row++; } else {
row--; col++; if(row==0) row=n; if(col>n) col=1;
if(sqrt[row][col]!=0) {
row=temp_row+1;
col=temp_col; if(row>n) row=1; } } } j=1;
while(j<=n) { k=1;
while(k<=n) {
if(k%n==0)
printf(\ else
printf(\ k++; } j++; } } }
问题30: 兔子的繁殖问题
题目描述
假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)?
这个问题是意大利数学家菲波那契(Fibonacci)在他1202年出版的《算盘全书》中提出来的,从第一对刚出生的小兔开始每月的兔子数被乘坐菲波那契序列。
输入
输入的第一个数为n,接下来有n个数字。每个数字为一个月份m(m<=45)。
输出
输出为n行,每行为第m个月后的兔子总数。
样例输入
6
1 2 3 4 5 10
样例输出
1 2 3 5 8 89
提示
可以先计算出菲波那契序列并存储下来,然后查询出每月兔子数。
解答:
#include
a[i]=a[i-1]+a[i-2]; i++; }
scanf(\ for(i=1;i<=x;i++) {
scanf(\ b[i]=a[n]; } for(i=1;i<=x;i++)
printf(\}
问题31: 简单的整数排序
题目描述
对给出的若干整数按从小到大排序。
输入
输入的第一个数为n(n<=1000),后接n个整数。
输出
按从小到大的顺序输出这些整数,每两个整数之间用一个空格分隔开,最后一个整数后面没有空格。
样例输入
10 3 9 1 5 2 8 5 6 7 3
样例输出
1 2 3 3 5 5 6 7 8 9
提示
排序前必须把所有的整数都存储下来。因为只有最多1000个数,1秒的时间足够任何排序算法运行处结果来。
解答:
/*本题使用插入排序*/ #include