noip第34课作业

  1. 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;
}
  1. 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. 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;
}
  1. 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;  
}

猜你喜欢

转载自www.cnblogs.com/zhplovelnn/p/10385012.html