碰到有意思的题目
方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充规则是:使用1,2,3...的自然数列,从左上角开始,
按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
#include <stdio.h>
int main()
{
int z=1,x=0,y=0,i,j,n;
int a[100][100]={0};
a[x][y]=1;
printf("Please input n :\n");
scanf("%d",&n);
while( z < n* (n+1) / 2)
{
while (y+1<n&&!a[x][y+1])
{
a[x][++y]=++z;
}
while (x+1<n&&y-1>=0&&!a[x+1][y-1])
{
a[++x][--y]=++z;
}
while (x-1>=0&&!a[x-1][y])
{
a[--x][y]=++z;
}
}
for (i=0;i<=n-1;i++)
{
for(j=0;j<=n-1-i;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
return 0;
}
回去需要查一下蛇型数组,好像与这个类似。
输入年份、和这一年的第N天,最后算出这一天是这一年的几月几日。(区分闰年)
#include <stdio.h>
int fun1(int year)
{
if ((year % 4 == 0 && year%100!=0)||year % 400 ==0)
return 1;
else
return 0;
}
int main()
{
int year,n,i=0,s;
int a[12]={31,28,30,31,30,31,30,31,30,31,30,31};
int b[12]={31,29,30,31,30,31,30,31,30,31,30,31};
printf("Please input year :\n");
scanf("%d",&year);
printf("Please input n :\n");
scanf("%d",&n);
s=fun1(year);
if(!s)
{
while((n-a[i])>=a[i+1])
{
n=n-a[i];
i++;
}
if (n%a[i]==0)
{
if (i==0)
printf("1,%d",a[i-1]);
else
printf("%d,%d",i-1,a[i-1]);
}
else
printf("%d,%d",i+2,n-a[i+1]);
}
else
{
while ((n-b[i])>=b[i+1])
{
n=n-b[i];
i++;
}
if (n%b[i]==0)
{
if (i==0)
printf("1,%d",b[i-1]);
else
printf("%d,%d",i-1,b[i-1]);
}
else
printf("%d,%d",i+2,n-b[i+1]);
}
return 0;
}
写的很长,不太简洁,应该存在更好的方法。
今天犯了两个小错误
while后加了; 导致进入了死循环
scanf(“%d”,&a[i]); 取地址符忘记加了 显示段错误。
错误虽小,但是浪费的是时间,需要花大把的时间去检查。所以,现在只能一个个错误挨着犯,避免以后再犯,不断积累经验吧。