自由面试:我来面试你来答!!!
根据图形所给出的规律及语言描述提示用纯C(*.c)编写代码实现其功能。
要求:("四要")
1、要有良好的编程风格.
2、要有必要的文字说明.
3、要有较经典的算法.
4、要用精简的代码完成.
【1】
Please input a number:10
1 2 6 7 15 16 28 29 45 46
3 5 8 14 17 27 30 44 47 64
4 9 13 18 26 31 43 48 63 65
10 12 19 25 32 42 49 62 66 79
11 20 24 33 41 50 61 67 78 80
21 23 34 40 51 60 68 77 81 90
22 35 39 52 59 69 76 82 89 91
36 38 53 58 70 75 83 88 92 97
37 54 57 71 74 84 87 93 96 98
55 56 72 73 85 86 94 95 99 100
Input n(0~50):10
82 81 80 79 78 77 76 75 74 73
83 50 49 48 47 46 45 44 43 72
84 51 26 25 24 23 22 21 42 71
85 52 27 10 9 8 7 20 41 70
86 53 28 11 2 1 6 19 40 69
87 54 29 12 3 4 5 18 39 68
88 55 30 13 14 15 16 17 38 67
89 56 31 32 33 34 35 36 37 66
90 57 58 59 60 61 62 63 64 65
91 92 93 94 95 96 97 98 99 100
Input n(0~50):10
1 2 3 4 5 6 7 8 9 10
36 37 38 39 40 41 42 43 44 11
35 64 65 66 67 68 69 70 45 12
34 63 84 85 86 87 88 71 46 13
33 62 83 96 97 98 89 72 47 14
32 61 82 95 100 99 90 73 48 15
31 60 81 94 93 92 91 74 49 16
30 59 80 79 78 77 76 75 50 17
29 58 57 56 55 54 53 52 51 18
28 27 26 25 24 23 22 21 20 19
杨辉三角:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
#include <stdio.h>
#define MAX_LENGTH 10
int main()
{
int a[MAX_LENGTH][MAX_LENGTH];
int i=1,j=0,k=1,f=0;
memset(a,0,sizeof(int)*MAX_LENGTH*MAX_LENGTH);
a[0][0]=k;
while (k<MAX_LENGTH*MAX_LENGTH)
{
while (i!=f) a[--i][++j]=++k; //left and down
if (j!=1&&j<MAX_LENGTH-1) a[i][++j]=++k; //right
else if (j==MAX_LENGTH-1)
{
a[++i][j]=++k;//down
++f;
}
while (j!=f) a[++i][--j]=++k; //right and down
if (i<MAX_LENGTH-1) a[++i][j]=++k;//down
else
{
a[i][++j]=++k;//right
++f;
}
}
//show
for (int m=0;m<MAX_LENGTH;++m)
{
for (int n=0;n<MAX_LENGTH;++n)
{
printf("%d\t",a[m][n]);
}
//printf("\n");
}
return 0;
}
#include <stdio.h>
#define MAX_LENGTH 50
int a[MAX_LENGTH][MAX_LENGTH];
int main()
{
int n,i,j,k=0;
printf("Input n(0~50):");
scanf("%d",&n);
memset(a,0,sizeof(a));
k=a[i=0][j=0]=1;
while (k<n*n)
{
while (j+1<n &&!a[i][j+1]) a[i][++j]=++k; //left
while (i+1<n &&!a[i+1][j]) a[++i][j]=++k; //down
while (j-1>=0&&!a[i][j-1]) a[i][--j]=++k; //right
while (i-1>=0&&!a[i-1][j]) a[--i][j]=++k; //up
}
//show
for (i=0;i<n;++i)
{
for (j=0;j<n;++j)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
return 0;
}
#include<stdio.h>
void main()
{
int a[10][10],k,m,n,ab,s;
k=100;
ab=9;
s=0;
while(k>=1)
{
for(m=ab,n=ab;m>=s;m--,k--)
{
a[n][m]=k;
}
for(m=ab-1,n=s;m>=s;m--,k--)
{
a[m][n]=k;
}
for(m=s+1,n=s;m<=ab;m++,k--)
{
a[n][m]=k;
}
s++;
for(m=s,n=ab;m<=ab-1;m++,k--)
{
a[m][n]=k;
}
ab--;
}
for(m=0;m<10;m++)
{
for(n=0;n<10;n++)
{
printf("%-4d",a[m][n]);
}
printf("\n");
}
#include <stdio.h>
#define N 10000
int main(int argc, char **argv)
{
int data[ N ] = { 1 };
int digit, i, index, carry;
int tmp;
for ( i = 2, digit = 0; i <= 1000; i++ )
{
for ( index = 0, carry = 0; index <= digit; index++ )
{
tmp = data[ index ] * i + carry;
data[ index ] = tmp % 10000;
carry = tmp / 10000;
}
while ( carry )
{
data[ ++digit] = carry % 10000;
carry /= 10000;
}
}
printf( "%d", data[ digit ] );
for ( i = digit - 1; i >= 0; i-- )
{
printf( "%04d", data[ i ] ); // 控制数组格式!
}
return 0;
}