几道略有难度的C语言题 求高人给出源代码解决办法
几道略有难度的C语言题 求高人给出源代码
A:大学的大楼
时间限制: 1000ms
内存限制: 10000kB
描述
大学中的高富帅,天天在盖高楼,不断扩张。校长请ACM团队统计一下学校的高楼。请你讲学校的高楼排个序,按楼的高度从高到低,若高度相同,则占地面积大的在前,假设所有高楼都是规则的长方体。
输入
输入T组数据,第一行输入T,每组第一行输入一个n,表示楼的个数,接下去n行输入n个楼的长、宽、高,都是整数。(每个楼都有个序号,1~n号楼顺序输入)
输出
输出排序后楼的序号顺序。
样例输入
2
2
1 2 3
2 2 4
3
1 1 1
2 2 2
3 3 3
样例输出
2
1
3
2
1
B:上楼梯
时间限制: 1000ms
内存限制: 10000kB
描述
一个人上楼梯,他可以一步上1级,可以一步上2级,也可以
一步上3级,现在楼梯一共有N级,有多少种不同的上法
(注意:当上到还剩下1级就到达时,不能直接上2级且不能
直接上3级,当上到还剩下2级就到达时,不能直接上3级),
输入
输入第一个数是M,表示M组测试数据,接下来有M行,每组测试数
据一行,为一个N(1<=N<=35)
输出
对于每一个测试数据,输出对应的不同的上楼梯方法
样例输入
3
1
5
10
样例输出
1
13
274
C:集合合并
时间限制: 3000ms
内存限制: 50000kB
描述
已知集合A与集合B,且第个集合内数据是唯一的。求A,B集合合并成新的集合C,要求C集合内的数据也是唯一的。并指出C集合的个数。
输入
三行,第一行分别为集合A,B的个数
第二行为A集合的数据
第三行为B集合的数据
输出
两行
第一行集合C的个数
第二行为C集合的数据
样例输入
4 5
12 34 56 78
34 67 89 34 76
样例输出
7
12 34 56 78 67 89 76
提示
数据小于30000
D:mirror number
时间限制: 1000ms
内存限制: 100000kB
描述
像1,101,2552这样对称的数,我们称它为mirror number,前10个mirror
number为1,2,3,4,5,6,7,8,9,11。以此类推。
请你求出第N个对称的数。
输入
第一行输入T,T组测试数据,接下去每组数据占一行,输入一个N(1<=N<=100000)。
输出
输出第N个mirror number,每组占一行。
样例输入
3
2
11
15
样例输出
2
22
66
E:有人说这是acm题
时间限制: 1000ms
内存限制: 10000kB
描述
最近一个老师和我们说,我给你们布置一个acm题。题目是这样的,给定矩阵大小,请你输出一个蛇形的字符串矩阵。从左上角开始蛇形顺时针转,从A开始按26个大写字母顺序,到Z后再回到A。你们说这个题难吗??
输入
第一行输入T,表示输入T组数据。每组占一行,分别输入n,m表示行数和列数。(1<=n,m<=50)
输出
输出矩阵。
样例输入
3
2 2
3 5
10 5
样例输出
AB
DC
ABCDE
LMNOF
KJIHG
ABCDE
ZABCF
YRSDG
XQTEH
WPUFI
VOVGJ
UNWHK
TMXIL
SLKJM
RQPON
F:取糖果
时间限制: 1000ms
内存限制: 10000kB
描述
女生节到了,ACM团队要给ACM的女生们发糖果啦,不过调皮的男生要写考考女生们一个小问题。
把n个糖果连成一排,要把这些糖果拿光,刚开始可以任取一个,接下去只能取“有相邻的糖果被取走”的糖果,例如刚开始有5个糖果,刚开始取走第3个,第二步只能取第2或第4个,以此类推。给出n,问将糖果取光的方法有多少种。两种取法只要有某次取的糖果不一样就视为不同。
输入
输入T组数据,第一行输入T。
接下去T行,每组数据输入一个整数n(1<=n<=100)。
输出
每组数据输出一行,为将糖果取光的方法数,结果模1000000007。
样例输入
2
1
2
样例输出
1
2
------解决方案--------------------
慢慢写吧,先送上第一题
A:大学的大楼
时间限制: 1000ms
内存限制: 10000kB
描述
大学中的高富帅,天天在盖高楼,不断扩张。校长请ACM团队统计一下学校的高楼。请你讲学校的高楼排个序,按楼的高度从高到低,若高度相同,则占地面积大的在前,假设所有高楼都是规则的长方体。
输入
输入T组数据,第一行输入T,每组第一行输入一个n,表示楼的个数,接下去n行输入n个楼的长、宽、高,都是整数。(每个楼都有个序号,1~n号楼顺序输入)
输出
输出排序后楼的序号顺序。
样例输入
2
2
1 2 3
2 2 4
3
1 1 1
2 2 2
3 3 3
样例输出
2
1
3
2
1
B:上楼梯
时间限制: 1000ms
内存限制: 10000kB
描述
一个人上楼梯,他可以一步上1级,可以一步上2级,也可以
一步上3级,现在楼梯一共有N级,有多少种不同的上法
(注意:当上到还剩下1级就到达时,不能直接上2级且不能
直接上3级,当上到还剩下2级就到达时,不能直接上3级),
输入
输入第一个数是M,表示M组测试数据,接下来有M行,每组测试数
据一行,为一个N(1<=N<=35)
输出
对于每一个测试数据,输出对应的不同的上楼梯方法
样例输入
3
1
5
10
样例输出
1
13
274
C:集合合并
时间限制: 3000ms
内存限制: 50000kB
描述
已知集合A与集合B,且第个集合内数据是唯一的。求A,B集合合并成新的集合C,要求C集合内的数据也是唯一的。并指出C集合的个数。
输入
三行,第一行分别为集合A,B的个数
第二行为A集合的数据
第三行为B集合的数据
输出
两行
第一行集合C的个数
第二行为C集合的数据
样例输入
4 5
12 34 56 78
34 67 89 34 76
样例输出
7
12 34 56 78 67 89 76
提示
数据小于30000
D:mirror number
时间限制: 1000ms
内存限制: 100000kB
描述
像1,101,2552这样对称的数,我们称它为mirror number,前10个mirror
number为1,2,3,4,5,6,7,8,9,11。以此类推。
请你求出第N个对称的数。
输入
第一行输入T,T组测试数据,接下去每组数据占一行,输入一个N(1<=N<=100000)。
输出
输出第N个mirror number,每组占一行。
样例输入
3
2
11
15
样例输出
2
22
66
E:有人说这是acm题
时间限制: 1000ms
内存限制: 10000kB
描述
最近一个老师和我们说,我给你们布置一个acm题。题目是这样的,给定矩阵大小,请你输出一个蛇形的字符串矩阵。从左上角开始蛇形顺时针转,从A开始按26个大写字母顺序,到Z后再回到A。你们说这个题难吗??
输入
第一行输入T,表示输入T组数据。每组占一行,分别输入n,m表示行数和列数。(1<=n,m<=50)
输出
输出矩阵。
样例输入
3
2 2
3 5
10 5
样例输出
AB
DC
ABCDE
LMNOF
KJIHG
ABCDE
ZABCF
YRSDG
XQTEH
WPUFI
VOVGJ
UNWHK
TMXIL
SLKJM
RQPON
F:取糖果
时间限制: 1000ms
内存限制: 10000kB
描述
女生节到了,ACM团队要给ACM的女生们发糖果啦,不过调皮的男生要写考考女生们一个小问题。
把n个糖果连成一排,要把这些糖果拿光,刚开始可以任取一个,接下去只能取“有相邻的糖果被取走”的糖果,例如刚开始有5个糖果,刚开始取走第3个,第二步只能取第2或第4个,以此类推。给出n,问将糖果取光的方法有多少种。两种取法只要有某次取的糖果不一样就视为不同。
输入
输入T组数据,第一行输入T。
接下去T行,每组数据输入一个整数n(1<=n<=100)。
输出
每组数据输出一行,为将糖果取光的方法数,结果模1000000007。
样例输入
2
1
2
样例输出
1
2
------解决方案--------------------
慢慢写吧,先送上第一题
- C/C++ code
#include<stdio.h> /*使用结构体来表示大楼*/ struct building { int length; int width; int height; }; int main(){ /*记录多少组数据*/ int group; /*记录每一组数据里面有多少个大楼,我假定的最多50,这个可以是N*/ int count[50]; int i, j, k; /*记录总共有多少个大楼*/ int temp = 0; /*记录输入的大楼,假定最多100个大楼*/ struct building building[100]; /*中间变量,排序时使用*/ struct building tempBuilding; printf("Please enter the group of data:"); scanf("%d", &group); for(i=0;i<group;i++){ printf("Please enter the count of building:"); scanf("%d", &count[i]); for(j=0; j< count[i]; j++){ printf("Please enter the length width height of this building:"); scanf("%d%d%d", &building[temp].length, &building[temp].width, &building[temp].height); temp ++; } } /*对每一组的大楼进行排序,时间复杂度不够好,不过对于这题的要求是没有关系的,凑合着使吧*/ for(i=0;i<group;i++){ for(j=i*group;j<(count[i]-1)*group;j++){ for(k=j;k<(count[i]-1)*group;k++){ if(building[j].height < building[k+1].height){ tempBuilding = building[k+1]; building[k+1] = building[j]; building[j] = tempBuilding; } else if(building[j].height == building[k+1].height && building[j].length*building[j].width < building[k+1].length*building[k+1].width){ tempBuilding = building[k+1]; building[k+1] = building[j]; building[j] = tempBuilding; } } } } /*输出排序后的大楼*/ for(i=0;i<temp;i++){ printf("%d\t%d\t%d \n", building[i].length, building[i].width, building[i].height); } getch(); return 0; }