PAT乙级(11) 最难的问题 成绩排名 (water)

PAT乙级(11) 最难的问题 成绩排名 (water)

题目描述

NowCoder生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是军团中的一名军官,需要把发送来的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A 都分别替换成字母F),其他字符不 变,并且消息原文的所有字母都是大写的。密码中的字母与原文中的字母对应关系如下。

密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

输入描述:

输入包括多组数据,每组数据一行,为收到的密文。密文仅有空格和大写字母组成。

输出描述:

对应每一组数据,输出解密后的明文。

输入例子:

HELLO WORLD
SNHJ

输出例子:

CZGGJ RJMGY
NICE

思路:

可以使用数组,然后当超出数组范围时归零.控制好数字范围输出即可

代码:


#include <iostream>
#include <string>
using namespace std;
int main()
{
	char a[26] =
	{ 'A','B', 'C', 'D','E',
	 'F','G', 'H', 'I', 'J',
	 'K','L', 'M', 'N', 'O',
	 'P','Q', 'R', 'S', 'T',
	 'U','V', 'W', 'X', 'Y' ,'Z' };
	string s,res;
	int index=0;
	while (getline(cin, s))
        //  使用  getline(cin,s)    保证空格不被吞掉
	{
		res = "";
		for (int i = 0; i < s.size(); i++)
		{
			if (s[i] == ' ')
			{
				res += ' ';
				continue;
			}
			index = s[i] - 65 - 5;
			if (index < 0)
			{
				int j = 26 + index;
				res += a[j];
			}
			else
				res += a[index];
		}
		cout << res << endl;
	}
	return 0;
}

// 使用 getline(cin,s) 保证空格不被吞掉

大写字符转字符数组对应位置 : s[ i ]-65

优化方案1:

链接:https://www.nowcoder.com/questionTerminal/9f6b8f6ec26d44cfb8fc8c664b0edb6b
来源:牛客网

#include <stdio.h>
#include <string.h>
int main()
{
    char ch[26]={'V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U'};
    char str[100000];
    while(gets(str)){
        int len=strlen(str);
        int i;
        for(i=0;i<len;i++){
            if(str[i]>='A'&&str[i]<='Z')
                printf("%c",ch[str[i]-'A']);
            else
                printf("%c",str[i]);
        }
        printf("\n");
    }
    return 0;
}

优化方案2:

链接:https://www.nowcoder.com/questionTerminal/9f6b8f6ec26d44cfb8fc8c664b0edb6b
来源:牛客网

#include <stdio.h>
 
int main() {
    int c;
    while ((c = getchar()) != EOF){
        if ('A' <= c) {
        c = 'E' < c ? (c - 5) : (c + 21);
        }
        putchar(c);
    }
}

优化版本3:

链接:https://www.nowcoder.com/questionTerminal/9f6b8f6ec26d44cfb8fc8c664b0edb6b
来源:牛客网

import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            char[] sw=new char[130];
            String str1="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            String str2="VWXYZABCDEFGHIJKLMNOPQRSTU";
            for(int i=0;i<str1.length();i++){
                sw[str1.charAt(i)]=str2.charAt(i);
            }
            String str=sc.nextLine();
            String result="";
            for(int i=0;i<str.length();i++){
                if(str.charAt(i)==' '){
                    result+=" ";
                }else{
                    result+=sw[str.charAt(i)];
                }
            }
            System.out.println(result);
        }
    }
}

题目描述

读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入描述:

每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生的姓名 学号 成绩 … … … 第n+1行:第n个学生的姓名 学号 成绩 其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出描述:

对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。

输入例子:

3Joe Math990112 89
Mike CS991301 100
Mary EE990830 95

输出例子:

Mike CS991301
Joe Math990112

思路:

不使用结构体:

定义变量,每次比较,然后得到最大最小值.需要注意第一次判断时,给最小成绩的三个变量赋值.

使用结构体

代码:

//作者:w
		/*开始时间:
		//结束时间:
		//用时:分秒
		//所属题库:PAT乙级练习题
		//题目:
		//思路:
		//注意:
		//总结:
		*/
//非结构体
#include <iostream>
#include <string>
using namespace std;
int main()
{
	int n = 0;
	string name;
	string id;
	int grade;

	string maxname;
	string maxid;
	int maxgrade=0;
	
	string minname;
	string minid;
	int mingrade = 0;

	cin >> n;
	int i = 0;
	while (n--)
	{
		cin >> name >> id >> grade;
		if (grade>=maxgrade)
		{
			maxgrade = grade;
			if (i==0)
			{
				minname = name;
				minid = id;
				mingrade = grade;
				i++;
			}
			maxid = id;
			maxname = name;
		}
		else if (grade<mingrade)
		{
			minname = name;
			minid = id;
			mingrade = grade;
		}
	}
	cout <<maxname<<" "<<maxid<< endl;
	cout <<minname<<" "<< minid<< endl;

	return 0;
}

发布了96 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41852212/article/details/102532613