清华大学 2000年研究生复试上机题 解题报告

原创 2013年02月15日 00:54:31
题目1058:反序输出

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:3478

解决:1092

题目描述:

输入任意4个字符(如:abcd), 并按反序输出(如:dcba)

输入:

题目可能包含多组用例,每组用例占一行,包含4个任意的字符。

输出:

对于每组输入,请输出一行反序后的字符串。
具体可见样例。

样例输入:
Upin
cvYj
WJpw
cXOA
样例输出:
nipU
jYvc
wpJW
AOXc
来源:
2000年清华大学计算机研究生机试真题
//注意用栈来做反序输出,我认为是漂亮的做法
#include <stdio.h>
#include <stack>
using namespace std;
int main(){
    char str[10];
    char ans[10];
    stack<int> stack1;
    while(scanf("%s",str) != EOF){
                          int i ;
                          for(i = 0;str[i] != 0;i++){
                               stack1.push(i);
                          }
                          int j = 0;
                          while(!stack1.empty()){
                                            //这里值得注意 
                                          ans[j] = str[stack1.top()];
                                          stack1.pop();
                                          j++;
                          }
                          ans[j] = 0;
                          puts(ans);
    }
    return 0;
}

题目84:abc

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:1134

解决:895

题目描述:

设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有:abc+bcc=532。求满足条件的所有a、b、c的值。

输入:

题目没有任何输入。

输出:

请输出所有满足题目条件的a、b、c的值。
a、b、c之间用空格隔开。
每个输出占一行。

样例输入:

样例输出:
//可以根据自己的预先推算出
// a <= 5, c = 1或者6 

#include <iostream>  
#include <stdio.h>
#include <math.h>
 
using namespace std; 
int main(){
	int sum = 0;
	char space = ' ';//因为要求a,b,c要以空格隔开,这里对空格的处理,比较好 
	for(int a = 0; a <= 9; a++){
		for(int b =0;b <= 9; b++){
			for(int c = 0; c<= 9; c++){
				sum = (a*100 + b*10 + c) + (b*100 + c*10 + c);
				if(sum == 532)printf("%d%c%d%c%d\n",a,space,b,space,c);
			}
		}
	}
	//system("pause");
	return 0;
}

//所以代码可以改进,这样代码会变的更快 
#include <iostream>  
#include <stdio.h>
#include <math.h>
 
using namespace std; 
int main(){
	int sum = 0;
	char space = ' ';//这个题这里对空格的处理,比较好 
    int c[2] = { 1, 6 }; 
	for(int a = 0; a <= 5; a++){
		for(int b =0;b <= 9; b++){
			for(int k = 0; k <= 2; c++){
				sum = (a*100 + b*10 + c[k]) + (b*100 + c[k]*10 + c);
				if(sum == 532)printf("%d%c%d%c%d\n",a,space,b,space,c);
			}
		}
	}
	//system("pause");
	return 0;
}
 


题目1060:完数VS盈数

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2181

解决:754

题目描述:

一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,

则称其为“盈数”。
求出2到60之间所有“完数”和“盈数”。

输入:

题目没有任何输入。

输出:

输出2到60之间所有“完数”和“盈数”,并以如下形式输出:
E: e1 e2 e3 ......(ei为完数)
G: g1 g2 g3 ......(gi为盈数)
其中两个数之间要有空格,行尾不加空格。

样例输入:

样例输出:

来源:
2000年清华大学计算机研究生机试真题
/*人一我百,人十我万,我要做AC小公主 
因为数不是很大,就从2到60遍历,找出每一个数的因数,并将每一个数的因数保存于一个数组中
再对数组中的数相加,若大于次数,则为盈数,将其存于盈数数组中
若等于此数,则次数为完数,将其存于完数的数组中*/ 

#include <stdio.h>
#include <math.h>
//#include <iostream>
//using namespace std;
int main(){
	int wanshu[60];
	int yingshu[60];
	int wanshucnt = 0;
	int yingshucnt = 0;
	int d[60];//用于存一个数的因数
	int index;//因数的索引号
	for(int i = 2; i <= 60; i++){	//开始找每一个数的因数
		index = 0;
		int sum = 0;//计算此数除本身以外所有因数的和
		for(int j = 1; j < i; j++){
			if( i % j == 0){
				d[index++] = j;//j为i的因数
				sum += j;
			}
		}
		if(sum == i)wanshu[wanshucnt++] = i;//i为完数
		if(sum > i)yingshu[yingshucnt++] = i;//i为盈数
	}
	//输出完数及盈数,注意其中两个数之间要有空格(printf("E: %d",wanshu[0]);
	printf("E: %d",wanshu[0]);
	for(int i = 1; i < wanshucnt;i++)
		printf(" %d",wanshu[i]);printf("E: %d",wanshu[0]);
	for(int i = 1; i < wanshucnt;i++)
		printf(" %d",wanshu[i]);
	printf("\n");
	printf("G: %d",yingshu[0]);
	for(int i = 1; i < yingshucnt;i++)
		printf(" %d",yingshu[i]);
	//system("pause");
	return 0;
}

题目2:成绩排序

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:3284

解决:723

题目描述:

    有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的

字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。

输入:

    测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
    每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。

输出:

    将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
    然后输出学生信息,按照如下格式:
    姓名 年龄 成绩

样例输入:
3
abc 20 99
bcd 19 97
bed 20 97
样例输出:
bcd 19 97
bed 20 97
abc 20 99
提示:

学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。

/*难点,怎么样用已知算法的来排序
记住:sort(student,student+n,cmp);//利用自己定义的规则对数组进行排序
if(tmp != 0) return tmp < 0;// not return a.name < b.name;*/ 

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;

struct E{//用结构体很适合 
	char name[101];//字符串结尾符的存储,所以101 
	unsigned int age;//要求输入的是正数,所以unsigned
	unsigned int score;
}student[1000];
bool cmp(E a, E b){//实现比较规则
	if(a.score != b.score) return a.score < b.score;
	int tmp = strcmp(a.name,b.name);
	if(tmp != 0) return tmp < 0;//返回的是布尔值,而不能return a.name < b.name;
	else return a.age < b.age;
}

int main(){
	int n;
	char space = ' ';
	//freopen("THU_1061.txt", "r", stdin);//用于测试,在上机时是个不错的测试方法
	while(scanf("%d",&n) != EOF){
		for(int i = 0; i < n; i++){
			scanf("%s%d%d",&student[i].name,&student[i].age,&student[i].score);
		}
		sort(student,student + n, cmp);
		for(int i = 0; i < n; i++){
			printf("%s%c%d%c%d\n",student[i].name,space,student[i].age,space,
student[i].score);
		}
	}
    //fclose(stdin);
    // while(1);
	return 0;
}


相关文章推荐

清华大学 2011年研究生复试上机题 解题报告

题目13:剩下的树 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1641 解决:606 题目描述:     有一个长度为整数L(...

清华大学2008年复试上机题 解题报告

九度OJ 题目1079:手机键盘 时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:208  解决:116 题目描述:     按照手机键盘输入字母的方式,计算所花费的时间 ...

清华大学2003年复试上机题 解题报告

九度OJ 题目1068:球的半径和体积 时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:602  解决:198 题目描述:     输入球的中心点和球上某一点的坐标,计算球的...

清华大学2011年复试上机题 解题报告

九度OJ 题目1088:剩下的树 时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:929  解决:328 题目描述:         有一个长度为整数L(1        ...

清华大学2010年复试上机题 解题报告

九度OJ 题目1083:特殊乘法 时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:335  解决:205 题目描述:     写个算法,对2个小于1000000000的输入,...

清华大学2009年复试上机题 解题报告

九度OJ 题目1081:递推数列 时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:989  解决:112  题目描述:     给定a0,a1,以及an=p*a(n-1) + ...

清华大学2001年复试上机题 第二套 解题报告

九度OJ 题目1065:输出梯形 时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:377  解决:183 题目描述:     输入一个高度h,输出一个高为h,上底边为h的梯形...

清华大学2006年复试上机题 解题报告

九度OJ 题目1076:N的阶乘 时间限制:3 秒  内存限制:128 兆   特殊判题:否  提交:1266  解决:351 题目描述:      输入一个正整数N,输出N的阶乘。 输入...

哈尔滨工业大学2009年复试上机题 解题报告

九度OJ 题目1045:百鸡问题 时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:1865  解决:685 题目描述:         用小于等于n元去买100只鸡,大鸡5元...

浙江大学2005年复试上机题 解题报告

九度OJ 题目1010:A + B 时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:1431  解决:751 题目描述:     读入两个小于100的正整数A和B,计算A+B. ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:清华大学 2000年研究生复试上机题 解题报告
举报原因:
原因补充:

(最多只允许输入30个字)