考研机试题(2014)

1.求一串数中大于1素数之和

输入输入个数  数字  不超过100个数 不超过10组 多组输入  0结束

输入

4 1 2 3 4

5 1 2 3 4 5

0

输出

5

10

#include <stdio.h>
#define MAX 10

bool isPrime(int n){
//判断是否是素数

	bool flag = true;

	if( n <=1)  return false;

	for(int i = 2; i*i <= n; i++){
		if(n % i == 0){
			flag = false;
			break;
		}
	}

	return flag;
}

int main(){
	int res[MAX];
	int sum,num,n,cnt;
	cnt = 0;

	while(scanf("%d",&n) != EOF && n != 0){
		sum = 0;
		for(int i = 0; i < n; i++){
			scanf("%d",&num);
			if(isPrime(num))
				sum += num;
		}
		res[cnt++] = sum;
	}

	for(int i = 0; i < cnt; i++){
		printf("%d\n",res[i]);
	}
	return 0;
}

2.压缩字符串

输入只含A-Z的字符串 不超过1000个字母 将连续相同字母压缩为重复次数+字幕(这个忘记是多组输入还是单组了)

输入

ABBCCC

输出

A2B3C

#include <stdio.h>
#include <string.h>
#define N 1000

char str[N];
char ans[N];

int main(){

	while(scanf("%s",str) != EOF){
		int len = strlen(str);

	    ans[0] = str[0];
		int i = 1,j = 0,count = 1;
	    char pre = str[0];

		while(1){
			char tmp = str[i];
			if(tmp != pre){
				j++;
				if(count >= 2)
				  ans[j++] = count+'0';
				count = 1;
				ans[j] = str[i++];
				pre = tmp;
			}else{
				count++;
				i++;
			}
			if(tmp == '\0')
				break;
		}

		puts(ans);
		printf("\n");

	}
	return 0;
}

3.机器人走迷宫

迷宫由 N W S E 组成  踩到N向上走一格 踩到W 向左走一格 踩到S向下走一格 踩到E 向右走一格

输入迷宫行数  列数  不大于10 机器人初始列数(注意 这个列数是从1开始数的) 判断能否走出迷宫。能走出输出步数

多组输入 遇 0 0 0 结束输入

输入

4 6 5

NNNNSN

NNNSWN

NNSWNN

NSWNNN

3 5 2

NSNNNN

NSWNNN

NENNNN

0 0 0

输出

7

no

#include <stdio.h>
#define MAX 100
char buf[MAX][MAX];
bool mark[MAX][MAX];

int main(){

	int m,n,sx,sy;
	while(scanf("%d%d%d%d",&m,&n,&sx,&sy) != EOF){
		if(m == 0 && n == 0)
			break;
		getchar();
		for(int i = 0; i < m; i++){
			scanf("%s",buf[i]);
			getchar();
		}

		for( i = 0; i < m; i++){
			for(int j = 0; j < n; j++)
				mark[i][j] = false;
		}
		int count = 0;
		while(1){

		//	printf("%d %d\n",sx,sy);

			if(sx < 0 || sx > m-1 || sy < 0 || sy > n-1){
				printf("%d\n",count);
				break;
			}
			if(mark[sx][sy]){
				printf("no\n");
				break;
			}
			switch(buf[sx][sy]){
			case 'W':mark[sx][sy] = true;sy--;count++;break;
			case 'E':mark[sx][sy] = true;sy++;count++;break;
			case 'S':mark[sx][sy] = true;sx++;count++;break;
			case 'N':mark[sx][sy] = true;sx--;count++;break;
			}

		}

	}
	return 0;
}

4.成绩排行(这个具体排序的顺序记不清了 但是就是读取文件+ 排序)

从文件Score。txt中读取学生信息 对其进行排序 学生信息包括学号不高于20位 题目数不超过10 分数  首先按照回答题数从大往小排  题数一样的按照分数从小往大排。

文件内容

CS00000001 4 110

CS00000002 4 120

CS00000003 5 150

输出

CS00000003 5 150

CS00000001 4 110

CS00000002 4 120

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

#define N 1000

struct sts{
	char no[30];
	int  num;
	int  score;
}stu[N];

bool cmp(sts A, sts B){
	if(A.num != B.num)
		return A.num > B.num;
	if(A.score != B.score)
		return A.score < B.score;
	else{
	    int tmp = strcmp(A.no,B.no);
		return tmp < 0;
	}
}

int main(){

	FILE *fp;
	if((fp = fopen("Score.txt","r")) == NULL){
		printf("Read file failed\n");
		return -1;
	}
	int i = 0;
	while(!feof(fp)){
		fscanf(fp,"%s%d%d",stu[i].no,&stu[i].num,&stu[i].score);
	    i++;
	}
	sort(stu,stu+i,cmp);

	for(int j = 0; j < i; j++)
		printf("%s %d %d\n",stu[j].no,stu[j].num,stu[j].score);
	fclose(fp);

	return 0;
}
时间: 2024-10-07 17:31:04

考研机试题(2014)的相关文章

【华科考研机试题】最长&amp;最短文本

题目 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出. 解题思路 1.输入所有字符串(有空格不另算字符串). 2.将char*字符串转换成string型. 3.由于map是自动排好序的,所以begin和end可以取到最小的地址和最大的后一个地址. map <int,list<string>>m;//构造map m[s.length].push_back(s);//map插入 list l = m.begin()->s

【华科考研机试题】阶乘

题目 输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数). 解题思路 打表算最快,不用每个数据都算一次. 复杂度 时间复杂度(输入的数据量O(m)) 空间复杂度O(1) 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; //实际上算到30的阶乘肯定溢出了 //但是没关系,题目给的肯定不是溢出的数据 ll jc[30]; //jc

考研复试机试题(2010)

考研复试机试题(2010) 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 解答: /* * 描述: 机试题A解答 * 作者: 张亚超 * 博客: 牟尼的专栏 http://blog.csdn.net/u012027907 * 日期: 2014/7/21 */ #include "stdio.h" #define Max 1000 int getEveSum(int num){ //求各位的数字和 int sum = 0; while(num

华为2014机试题(一)

过几天就要进行华为的机试了,今儿临时抱抱佛脚,在网上找到2014届华为校招的机试题,琢磨了一会儿,贴出来记录下. 首先感谢一下Hackbuteer提供的题目:http://blog.csdn.net/hackbuteer1/article/details/11132567 对于第一题,字符过滤.最简单也是最直接的就是HASH.题目规定了输入序列只能为小写字符'a~z'.因此直接开辟一个大小为26的数组用于记录当前字符是否已经出现即可. 需要注意的问题: 1. hash数组记得初始化 2. pOu

考研复试机试题(2009)

Problem A:请写一个程序,给出指定整数范围[a ,b]内所有的完数,一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数,例如6是完数,因为6=1+2+3. 输入说明:共一组数据,为两个正整数,分别表示a和b(1<a<b<10^5). 输出说明:指定范围内的所有完数,每个数占一行. 输入样本 1 100 输出样本 6 28 解答: /* * 描述: 机试题A解答 * 作者: 张亚超 * 博客: 牟尼的专栏 http://blog.csdn.net/u012027907 *

九度oj题目&amp;amp;吉大考研10年机试题全解

吉大考研机试2010年题目 题目一(jobdu1478:三角形的边).    http://ac.jobdu.com/problem.php?pid=1478 给出三个正整数,计算最小的数加上次小的数与最大的数之差. 题目分析: 简单题.能够用非常多方法解决 AC代码: #include<iostream> using namespace std; int main() {     int a,b,c,ma;     while(cin>>a>>b>>c){

华为的一道机试题--等式变换

华为的一道机试题 (http://blog.csdn.net/zombie_slicer/article/details/37346025) 第三题:等式变换 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数. 输入:       正整数,等式右边的数字 输出:       使该等式成立的个数 样

ASPNET服务端控件练习(一个机试题)

简单记录: 模糊查询的select语句的拼写 public List<Model.Student> GetWhereStudent(string name, string sub, string isG) { List<Web.Model.Student> lt = new List<Model.Student>(); string sql = "select * from SC_Student where studentName like @n and [e

Java基础机试题

package day8;import java.util.Scanner;/** * Java基础机试题 * @author:lyrand * */public class convert {        static void exitContinue(){                while (true){            System.out.print("你想继续吗?(y/n)");            Scanner sc = new Scanner(Sys