- 1. 信息加密
【问题描述】
在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去。有一种加密规则是这样的:
1. 对于字母字符,将其转换成其后的第3个字母。例如:A→D,a→d,X→A,x→a;
2. 对于非字母字符,保持不变。
现在,请你根据输入的一行字符,输出其对应的密码。
【输入格式】
输入一个字符串(字符串长度不超过100)。
【输出格式】
输出加密后的字符串。
【输入样例】I(2016)love(08)China(15)!
【输出样例】L(2016)oryh(08)Fklqd(15)!
#include<iostream> #include<string> using namespace std; string s; int main() { cin >> s; for(int i = 0; i < s.size(); i++){ if((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z')){ if(s[i] == 'X'){ s[i] = 'A'; } else if(s[i] == 'Y'){ s[i] = 'B'; } else if(s[i] == 'Z'){ s[i] = 'C'; } else if(s[i] == 'x'){ s[i] = 'a'; } else if(s[i] == 'y'){ s[i] = 'b'; } else if(s[i] == 'z'){ s[i] = 'c'; } else{ s[i] += 3; } } } cout << s << endl; return 0; }
- 2. 变换密码
【问题描述】
一密码变换规则如下:一个正整数对应一个字符;如果该数模123的值在97-122范围,变换为ASCII为该余数对应的小写字符;如果变换不了小写字符,将该数模91,若余数在65-90范围,变换为ASCII为该余数对应的大写字符;如果变换不了大小写字符,变换为“*”。输入一个正整数,输出变换后的字符。
输入:
输入一个正整数n(1<=n<=1000)表示原始密码。
输出:
输出变换后的密码。
【样例输入】42
【样例输出】*
#include<iostream> using namespace std; int main() { int n,t; cin >> n; t = n%123; if(t >= 97 && t <= 122) { cout << char(t) << endl; } else { t = n%91; if(t >= 65 && t <= 90) { cout << char(t) << endl; } else{ cout << "*" << endl; } } return 0; }
- 1. 乒乓球
【问题描述】
国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白 11 分制和 21 分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。
华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截止记录末尾)。
比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
在 11 分制下,此时比赛的结果是华华第一局 11 比 0 获胜,第二局 11 比 0 获胜,正在进行第三局,当前比分 1 比 1 。而在 21 分制下,此时比赛结果是华华第一局 21 比0 获胜,正在进行第二局,比分 2 比 1 。如果一局比赛刚开始,则此时比分为 0 比 0 。直到分差大于或者等于 2 ,才一局结束。
你的程序就是要对于一系列比赛信息的输入( WL 形式),输出正确的结果。
输入格式:
每个输入包含若干行字符串,字符串有大写的 W 、 L 和 E 组成。其中 E 表示比赛信息结束,程序应该忽略E之后的所有内容。
输出格式:
输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是 11 分制下的结果,第二部分是 21 分制下的结果,两部分之间由一个空行分隔。
【输入样例】
WWWWWWWWWWWWWWWWWWWW
WWLWE
【输出样例】
11:0
11:0
1:1
21:0
2:1
#include<iostream> #include<cstdlib> #include<string> using namespace std; int main() { string s1,s2;//方便输入 while(getline(cin,s2))s1+=s2;//输入字符串 int i=0,a=0,b=0;//i是指针,a统计了赢的次数,b是输的次数 while(s1[i]!='E')//只要不是结束符,现在是判断11分制 { switch(s1[i])//switch判断s1[i] { case 'W':a++;break;//如果s1[i]是‘W’,累计到a里 case 'L':b++;break;//如果s1[i]是‘E’,累计到b里 } if((a>=11||b>=11)&&(abs(a-b)>=2))//是否到达条件,一盘有没有结束 { cout<<a<<":"<<b<<endl;//输出 a=0;b=0;//清零,下一盘 } i++;//下一个字符 } cout<<a<<":"<<b<<endl;//剩下的也要输完 cout<<endl;//换行隔开 a=b=0;i=0;//清零,换了一个分制 while(s1[i]!='E')//同理 { switch(s1[i]) { case 'W':a++;break; case 'L':b++;break; } if((a>=21||b>=21)&&(abs(a-b)>=2)) { cout<<a<<":"<<b<<endl; a=0;b=0; } i++; } cout<<a<<":"<<b<<endl; return 0; }
- 2. 流星
【问题描述】
从坐标(0,0)到(w,h)是一个矩形相机的视野范围,注意矩形的四条线看拍不到物体的。w和h均为整数。P代表不同的流星,有不同的方向和速度。例如流星p的初始坐标是(1,3),速度v是(-2,5),则时间t为0.5时,流星的坐标为(1,3)+0.5*(-2,5)=(0.5,5).
问最多能照的多少颗流星。
输入:
输入第一行为两个整数w,h,分别表示相机视野范围的宽度和高度(从坐标零点开始),
第二行为整数n,表示有n颗流星,以下n行,每行4个整数,分别用空格分开,每行的前两个整数表示流星的初始坐标,后两个整数表示流星的速度方向。
输出:
输出仅一行,表示最多能照到的流星个数。
【输入样例】
4 2
2
-1 1 1 -1
5 2 -1 -1
【输出样例】
1
#include<stdio.h> #include<string.h> #include<algorithm> #define N 100000 + 10 using namespace std; typedef struct { int mk; double time; }NODE; NODE node[N+N]; bool camp(NODE a ,NODE b) { return a.time < b.time || a.time == b.time && a.mk < b.mk; } double Max(double x ,double y) { return x > y ? x : y; } double Min(double x ,double y) { return x < y ? x : y; } void Update(int x ,int a ,int w ,double& L ,double& R) { if(a == 0) { if(x <= 0 || x >= w) R = L - 1; } else if(a > 0) { L = Max(L ,-(double)x / a); R = Min(R ,(double)(w - x) / a); } else { L = Max(L ,(double)(w - x) / a); R = Min(R ,-(double)x / a); } } int main () { int t ,w ,h ,n ,i; int x ,y ,a ,b; //scanf("%d" ,&t); //while(t--) //{ scanf("%d %d" ,&w ,&h); scanf("%d" ,&n); int nowid = 0; for(i = 1 ;i <= n ;i ++) { scanf("%d %d %d %d" ,&x ,&y ,&a ,&b); double L = 0 ,R = 999999999; Update(x ,a ,w ,L ,R); Update(y ,b ,h ,L ,R); if(L < R) { node[++nowid].time = L; node[nowid].mk = 1; node[++nowid].time = R; node[nowid].mk = -1; } } int Ans = 0; sort(node + 1 ,node + nowid + 1 ,camp); int sum = 0; for(i = 1 ;i <= nowid ;i ++) { sum += node[i].mk; if(Ans < sum) Ans = sum; } printf("%d\n" ,Ans); // } return 0; }