XDOJ 复试解答

1.求一串数中大于1素数之和
输入输入个数  数字  不超过100个数 不超过10组 多组输入  0结束

输入 
4 1 2 3 4
5 1 2 3 4 5
0
输出
5
10


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

输入
ABBCCC
输出
A2B3C


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


4.成绩排行(这个具体排序的顺序记不清了 但是就是读取文件+ 排序)
从文件Score.txt中读取学生信息 对其进行排序 学生信息包括学号不高于20位 题目数不超过10 分数  首先按照回答题数从大往小排  题数一样的按照分数从小往大排。

文件内容
CS00000001 4 110
CS00000002 4 120
CS00000003 5 150


输出
1 CS00000003 5 150
2 CS00000001 4 110

3 CS00000002 4 120

#include<iostream>
#include<algorithm>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
typedef struct txt{
     string name;
	 int  p_num;
	 int  p_score;
}txt;
int main()
{
    txt stu[100];
    string s;
	int i,j,n=0,t,tt;
	ifstream infile("E://Score.txt",ios::in);	
	ofstream outfile("E://ordered.txt");	
    while(!infile.eof()){
	    infile>>stu[n].name>>stu[n].p_num>>stu[n].p_score;
		n++;
	}
    
	/*	while(getline(infile,s))
	{
		 stu[i].name=s;
         stu[i].p_num=(int)s;
		 stu[i].p_score=(int)s;
	     i++;
	}
*/
	cout<<"排名:"<<endl;
    for(i=0;i<n;i++){
		for(j=0;j<n-i;j++){
			if(stu[j].p_num<=stu[j+1].p_num){
			  t=stu[j].p_num;
				stu[j].p_num=stu[j+1].p_num;
                stu[j+1].p_num=t;
			}
			if(stu[j].p_score<stu[j+1].p_score){
			    
				t=stu[j].p_score;
				stu[j].p_score=stu[j+1].p_score;
                stu[j+1].p_score=t;
			    
			    s=stu[j].name;
				stu[j].name=stu[j+1].name;
				stu[j+1].name=s;
			}
		}
	}
	for(i=0;i<n;i++){
	   cout<<i+1<<" "<<stu[i].name<<" "<<stu[i].p_num<<" "<<stu[i].p_score<<endl;
	    outfile<<stu[i].name<<" "<<stu[i].p_num<<" "<<stu[i].p_score<<endl;
	}
	infile.close();
	infile.clear();
	outfile.close();
	outfile.clear();
	
	return 0;


}








你可能感兴趣的:(XDOJ 复试解答)