自由面试:我来面试你来答!!!

千杯不醉-sen 2010-10-02 08:24:27
加精
根据图形所给出的规律及语言描述提示用纯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


【2】

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


【3】

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


【4】

杨辉三角:
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

...全文
24952 732 打赏 收藏 转发到动态 举报
写回复
用AI写文章
732 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxzoufeng 2013-03-30
  • 打赏
  • 举报
回复
很不错,留名,以后练手
wenyusheng00 2013-03-18
  • 打赏
  • 举报
回复
你是CTO还是教师?
丨Barneyx 2013-03-04
  • 打赏
  • 举报
回复
喜欢!好题目!
程序员贝塔 2013-01-06
  • 打赏
  • 举报
回复
这个要好好看看啊,面试题还是比这个简单吧。。。
sl940316 2013-01-04
  • 打赏
  • 举报
回复
引用 727 楼 sl940316 的回复:
问题3C/C++ code?123456789101112131415161718192021222324#include<string.>int main(void){ int n,i,j=1,a[9][9],k=0; scanf("%d",&n); for(i=1;i<=n;i++) { for(j=i-1;j<=2*n-……
我贴错了…………………… 从来!
#include <stdio.h>
int main(void) 
{
	int a[10][10],round,i,n,road,x,y,count;
	scanf("%d",&n);

	road=n%2;	
	switch(road)
	{
	case 0:
		count=1;								for(round=1;round<=n/2;round++)
			{
			y=round-1;
			for(i=round-1;i<=n-1-round;i++)
				{
				a[i][y]=count;
				count++;
				}
			x=n-round;
			for(i=round-1;i<=n-1-round;i++)
				{
				a[x][i]=count;
				count++;
				}
			y=n-round;
			for(i=n-round;i>=round;i--)
				{
				a[i][y]=count;
				count++;
				}
			x=round-1;
			for(i=n-round;i>=round;i--)
				{
				a[x][i]=count;
				count++;
				}
			}
		break;

	case 1:											count=1;
		for(round=1;round<=(n-1)/2;round++)
		{
			y=round-1;
			for(i=round-1;i<=n-1-round;i++)
			{
				a[i][y]=count;
				count++;
			}
			x=n-round;
			for(i=round-1;i<=n-1-round;i++)
			{
				a[x][i]=count;
				count++;
			}
			y=n-round;
			for(i=n-round;i>=round;i--)
			{
				a[i][y]=count;
				count++;
			}
			x=round-1;
			for(i=n-round;i>=round;i--)
			{
				a[x][i]=count;
				count++;
			}
		}
		a[(n-1)/2][(n-1)/2]=count;				
		break;
	}

	for(y=0;y<=n-1;y++)					
	{
	for(x=0;x<=n-1;x++)
		printf("%5d",a[x][y]);
	printf("\n");
	}
} 
sl940316 2013-01-04
  • 打赏
  • 举报
回复
问题3
#include<string.>
int main(void)
{
	int n,i,j=1,a[9][9],k=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(j=i-1;j<=2*n-1-i;j++)
		{
			a[k][j]=i;
			a[j][k]=i;
			a[j][2*n-k-2]=i;
			a[2*n-k-2][j]=i;
		}
	k++;
	}
	for(i=0;i<(n*2-1);i++)
	{
		for(j=0;j<(n*2-1);j++)
			printf("%d",a[i][j]);
		printf("\n");
	}	
		return 0;
}
EvansssHu 2012-12-31
  • 打赏
  • 举报
回复
mark,有意思,练手。
wanyinwy444 2012-12-13
  • 打赏
  • 举报
回复
mark
Dr_manhattan 2012-12-05
  • 打赏
  • 举报
回复
如此好贴不顶不行,发现自己的水平很差,前三天就把我给弄晕了
良先生vip 2012-11-12
  • 打赏
  • 举报
回复
太棒了。。果断收藏。。。留着慢慢写写。。。
14号选手 2012-11-11
  • 打赏
  • 举报
回复
题目【1】
#include <stdio.h>
#define MAX_SIZE 50
int main(void)
{
	int a[MAX_SIZE][MAX_SIZE];
	int i,j,n,count=1;
	printf("请输入矩阵的阶数:\n");
	scanf("%d",&n);
	//初始化数组
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			a[i][j]=0;
	//对剩余的进行赋值
	//第一个元素进行赋值
	i=0;j=0;
	a[0][0]=count;
	count++;
	for(int m=1;m<=2*n-3;m++)//赋值的次数
	{
		//奇数行是从左下方至右上方赋值的
		if(m%2)
		{
			for(i=0;i<n;i++)
				for(j=0;j<n;j++)
					if(i+j==m)
						a[i][j]=count++;
		}
		//偶数行是从右上方至左下方赋值的
		else
		{
			for(i=n-1;i>=0;i--)
				for(j=n-1;j>=0;j--)
					if(i+j==m)
						a[i][j]=count++;
		}
	}
	//最后一个元素赋值
	i=n-1;j=n-1;
	a[i][j]=count;
	//输出矩阵
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			printf("%-3d ",a[i][j]);
		printf("\n");
	}
	return 0;
}
champkeh 2012-08-30
  • 打赏
  • 举报
回复
收藏啦!慢慢学
zhvon 2012-06-15
  • 打赏
  • 举报
回复
留名有待研究、、
zlp_benben 2012-05-24
  • 打赏
  • 举报
回复

#include "stdio.h";
int sum(int n)
{
int i = 1;
int result = 0;
for( ; i < n; i++)
result += i;
return result;
}
int getnumber(int x, int y)
{
int result = 0;
int msg = 0;

if( x + y > 11 )
{
x = 11 - x;
y = 11 - y;
msg = 1;
}
result = sum( x + y - 1 );
result += ( ( x + y ) % 2 ? y : x);

if( msg )
{
result = 101 - result;
}

return result;
}

void main()
{
int x;
int y;
for( y = 1; y < 11; y++)
{
for( x = 1; x < 11; x++)
{
printf( "%d ", getnumber( x, y) );
if( 10 == x )
printf("\n");
}
}
getchar();
}
zlp_benben 2012-05-24
  • 打赏
  • 举报
回复
刚才回复的格式乱了,重新回复一个:
题目【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
***/
#include "stdio.h";
int sum(int n)
{
int i = 1;
int result = 0;
for( ; i < n; i++)
result += i;
return result;
}
int getnumber(int x, int y)
{
int result = 0;
int msg = 0;

if( x + y > 11 )
{
x = 11 - x;
y = 11 - y;
msg = 1;
}
result = sum( x + y - 1 );
result += ( ( x + y ) % 2 ? y : x);

if( msg )
{
result = 101 - result;
}

return result;
}

void main()
{
int x;
int y;
for( y = 1; y < 11; y++)
{
for( x = 1; x < 11; x++)
{
printf( "%d ", getnumber( x, y) );
if( 10 == x )
printf("\n");
}
}
getchar();
}
zlp_benben 2012-05-24
  • 打赏
  • 举报
回复
题目【1】
#include "stdio.h";
int sum(int n)
{
int i = 1;
int result = 0;
for( ; i < n; i++)
result += i;
return result;
}
int getnumber(int x, int y)
{
int result = 0;
int msg = 0;

if( x + y > 11 )
{
x = 11 - x;
y = 11 - y;
msg = 1;
}
result = sum( x + y - 1 );
result += ( ( x + y ) % 2 ? y : x);

if( msg )
{
result = 101 - result;
}

return result;
}

void main()
{
int x;
int y;
for( y = 1; y < 11; y++)
{
for( x = 1; x < 11; x++)
{
printf( "%d ", getnumber( x, y) );
if( 10 == x )
printf("\n");
}
}
getchar();
}
半人马座星星 2012-03-14
  • 打赏
  • 举报
回复
输入2012后,后退了一天。
当前日期:03/14/12
当前时间:20:55:15
Please input a year:
2012

2012年日历如下:

January-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
---------------------------------------------------

February-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29
---------------------------------------------------

March-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
---------------------------------------------------

Aril-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
---------------------------------------------------

May-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
---------------------------------------------------

June-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
---------------------------------------------------

July-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
---------------------------------------------------

August-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

---------------------------------------------------

September-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
---------------------------------------------------

October-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
---------------------------------------------------

November-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

---------------------------------------------------

December-2012
---------------------------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
---------------------------------------------------
Press any key to continue[Quote=引用 35 楼 yangsen600 的回复:]
郁闷,程序写的人很烦、、、

题目【8】


C/C++ code


#include <stdio.h>
#include <time.h>
#define N 12
#define M 10

int isleap(int y)
{
return( (y%4==0&&y%100!=0) || y%400==0 );
}

int p……
[/Quote]
前进的菜鸟 2012-03-09
  • 打赏
  • 举报
回复
题目2:

void practice2()
{
int arr[MAX][MAX] = {0};
cout << "Please input a number:";
int num,value = 1,i = 0, j = 0;
cin >> num;

j = num /2;
if(num % 2)
{
i = num /2;
}
else
{
i = num / 2 - 1;
}
int flag = 1;
arr[i][j] = value++;

while( value <= num * num)
{
while(flag == 1) //向左
{
if(j >= 0 && arr[i][j - 1] == 0)
{
arr[i][--j] = value++;
flag = 2;
}
else if(arr[i][j - 1] != 0)
{
flag = 4;
}
}
if(j < 0)
break;

while(flag == 2) //向下
{
if(i < num && arr[i + 1][j] == 0)
{
arr[++i][j] = value++;
flag = 3;
}
else if(arr[i + 1][j] != 0)
{
flag = 1;
}
}
if(i == num)
break;

while(flag == 3) //向右
{
if(j < num && arr[i][j + 1] == 0)
{
arr[i][++j] = value++;
flag = 4;
}
else if(arr[i][j + 1] != 0)
{
flag = 2;
}
}
if(j == num)
break;

while(flag == 4) //向上
{
if(i >= 0 && arr[i - 1][j] == 0)
{
arr[--i][j] = value++;
flag = 1;
}
else if(arr[i - 1][j] != 0)
{
flag = 3;
}
}
if(i < 0)
break;
}

for(i = 0; i < num; i++)
{
for(j = 0;j < num; j++)
{
cout<< setw(4) << arr[i][j];
}
cout << endl;
}
}
前进的菜鸟 2012-03-09
  • 打赏
  • 举报
回复
题目1:

void practice11()
{
int arr[MAX][MAX] = {0};
cout << "Please input a number:";
int num,value = 1,i = 0, j = 0;
cin >> num;
bool flag = true;

while(value <= num * num)
{
if( i == 0 && flag && j != num - 1) //向右
{
arr[i][j++] = value++;
flag = false;
}
else //向下
{
arr[i++][j] = value++;
flag = false;
}
while( j != 0 && !flag && i != num - 1) //向左下
{
arr[i++][j--] = value ++;
}
if(j == 0 && !flag && i != num - 1) //向下
{
arr[i++][j] = value++;
flag = true;
}
else //向右
{
arr[i][j++] = value++;
flag = true;
}
while( i != 0 && flag && j != num - 1) // 向右上
{
arr[i--][j++] = value ++;
}
}
for(i = 0; i < num; i++)
{
for(j = 0;j < num; j++)
{
cout<< setw(4) << arr[i][j];
}
cout << endl;
}
}
zhangyucech 2012-02-10
  • 打赏
  • 举报
回复
晕,为什么我的代码不能显示格式呢?再试下...

#include <stdio.h>
#define MAX 20

int main()
{
int n,k,i,j,count=1;
char a[MAX][MAX];
printf("please input number of rows: ");
scanf("%d",&n);
for(k=0;k<n;k++)
for(i=k,j=0;(i>=0 && j>=0);i--,j++)
((k%2)? a[j][i]:a[i][j])=count++;
for(i=0;i<n-1;i++)
for(j=0;i+j<n-1;j++)
a[n-1-i][n-1-j]=n*n+a[0][0]-a[i][j];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++) printf("%d\t",a[i][j]);
printf("\n");
}
getch();
return 0;
}
加载更多回复(635)

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧