zoukankan      html  css  js  c++  java
  • 18.06.27 水题整理(3)--1st 上机

    E:生理周期

    描述

    人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。

    输入

    一行,包含四个整数:p, e, i和d,相邻两个整数之间用单个空格隔开。 p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d 是给定的时间,可能小于p, e, 或 i。 所有给定时间是非负的并且小于等于365, 所求的时间小于等于21252。

    输出

    一个整数,即从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。

    样例输入

    4 5 6 7

    样例输出

    16994

    来源East Central North America 1999, POJ 1006, 程序设计实习2007

     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <memory.h>
     5 #include <queue>
     6 #include <math.h>
     7 using namespace std;
     8 const int maxn =30;
     9 int p, e, i, d;
    10 
    11 int main()
    12 {
    13     cin >> p >> e >> i >> d;
    14     int _d = d;
    15     d++;
    16     for (; abs(d - p) % 23 != 0; d++);
    17     for (; abs(d - e) % 28!=0; d += 23);
    18     for (; abs(d - i) % 33 != 0; d += 23 * 28);
    19     printf("%d
    ", d-_d);
    20     return 0;
    21 }
    View Code

    F:完美立方

    描述

    形如a3= b3 + c3 + d3的等式被称为完美立方等式。例如123= 63 + 83 + 103 。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a3 = b3 + c3 + d3,其中a,b,c,d 大于 1, 小于等于N,且b<=c<=d。

    输入

    一个正整数N (N≤100)。输出每行输出一个完美立方。

    输出

    格式为:
    Cube = a, Triple = (b,c,d)
    其中a,b,c,d所在位置分别用实际求出四元组值代入。

    请按照a的值,从小到大依次输出。当两个完美立方等式中a的值相同,则b值小的优先输出、仍相同则c值小的优先输出、再相同则d值小的先输出。

    样例输入

    24

    样例输出

    Cube = 6, Triple = (3,4,5)
    Cube = 12, Triple = (6,8,10)
    Cube = 18, Triple = (2,12,16)
    Cube = 18, Triple = (9,12,15)
    Cube = 19, Triple = (3,10,18)
    Cube = 20, Triple = (7,14,17)
    Cube = 24, Triple = (12,16,20)

    来源1543

     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <memory.h>
     5 #include <queue>
     6 #include <math.h>
     7 using namespace std;
     8 const int maxn =30;
     9 int n;
    10 
    11 int main()
    12 {
    13     cin >> n;
    14     int a, b, c, d;
    15     for (a = 3; a <= n; a++)
    16         for (b = 2; b < a; b++)
    17             for (c = b; c < a; c++)
    18                 for (d = c; d < a; d++)
    19                     if (a*a*a == b * b*b + c * c*c + d * d*d)
    20                         printf("Cube = %d, Triple = (%d,%d,%d)
    ", a, b, c, d);
    21     return 0;
    22 }
    View Code

    I:放苹果

    描述

    把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

    输入

    第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

    输出

    对输入的每组数据M和N,用一行输出相应的K。

    样例输入

    1
    7 3
    

    样例输出

    8

    来源lwx@POJ

     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <memory.h>
     5 #include <queue>
     6 #include <math.h>
     7 using namespace std;
     8 const int maxn =30;
     9 int t;
    10 
    11 int solve(int app, int pla) {
    12     if (pla == 1)return 1;
    13     if (app == 0)return 1;
    14     if (pla > app)return solve(app, app);
    15     return solve(app-pla,pla) + solve(app, pla - 1);
    16 }
    17 
    18 int main()
    19 {
    20     cin >> t;
    21     while (t--) {
    22         int m, n;
    23         cin >> m >> n;
    24         printf("%d
    ",solve(m, n));
    25     }
    26     return 0;
    27 }
    View Code

    J:古代密码

    描述

    古罗马帝国有一个拥有各种部门的强大政府组织。其中一个部门就是保密服务部门。为了保险起见,在省与省之间传递的重要文件中的大写字母是加密的。当时最流行的加密方法是替换和重新排列。

    替换方法是将所有出现的字符替换成其它的字符。有些字符会替换成它自己。例如:替换规则可以是将'A' 到 'Y'替换成它的下一个字符,将'Z'替换成 'A',如果原词是 "VICTORIOUS" 则它变成 "WJDUPSJPVT"。

    排列方法改变原来单词中字母的顺序。例如:将顺序<2, 8="">应用到 "VICTORIOUS" 上,则得到"IVOTCIRSUO"。

    人们很快意识到单独应用替换方法或排列方法加密,都是很不保险的。但是如果结合这两种方法,在当时就可以得到非常可靠的加密方法。所以,很多重要信息先使用替换方法加密,再将加密的结果用排列的方法加密。用两种方法结合就可以将"VICTORIOUS" 加密成"JWPUDJSTVP"。

    考古学家最近在一个石台上发现了一些信息。初看起来它们毫无意义,所以有人设想它们可能是用替换和排列的方法被加密了。人们试着解读了石台上的密码,现在他们想检查解读的是否正确。他们需要一个计算机程序来验证,你的任务就是写这个验证程序。

    输入

    输入有两行。第一行是石台上的文字。文字中没有空格,并且只有大写英文字母。第二行是被解读出来的加密前的文字。第二行也是由大写英文字母构成的。
    两行字符数目的长度都不超过100。

    输出

    如果第二行经过某种加密方法后可以产生第一行的信息,输出 "YES",否则输出"NO"。

    样例输入

    JWPUDJSTVP
    VICTORIOUS

    样例输出

    YES
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <memory.h>
     5 #include <map>
     6 #include <math.h>
     7 using namespace std;
     8 const int maxn =120;
     9 map<char, int> mp1;
    10 map<char, int> mp2;
    11 int c1[maxn], c2[maxn];
    12 
    13 
    14 int main()
    15 {
    16     int flag = 1;
    17     string before,after;
    18     cin >> before >> after;
    19     if (before.length() != after.length()) {
    20         printf("NO
    ");
    21         return 0;
    22     }
    23     int l = before.length();
    24     for (int i = 0; i < l; i++) {
    25         mp1[before[i]]++;
    26         mp2[after[i]]++;
    27     }
    28     map<char, int>::iterator i1 = mp1.begin(), i2 = mp1.end(), i3 = mp2.begin(), i4 = mp2.end();
    29     for (; i1 != i2; i1++)c1[(*i1).second]++;
    30     for (; i3 != i4; i3++)c2[(*i3).second]++;
    31     for(int i=0;i<maxn;i++)
    32         if (c1[i] != c2[i]) {
    33             flag = 0;
    34             break;
    35         }
    36     if (flag)printf("YES
    ");
    37     else printf("NO
    ");
    38     return 0;
    39 }
    View Code

    虽然这些题整理了也不会看……

    但是这是现在唯一不用脑子能干的事了(滑稽)

    基本是些计概题,按我的复习速度肯定不会复习这些题了……

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    STM32与FPGA通信写数据出错问题解决方法
    Altium Designer 8.0不为人知的27个技巧
    modbus详尽中文资料、软件、代码
    STM32中断与NVIC概览
    FatFs读写SD卡出现FR_NO_FILESYSTEM解决方法.
    用两个低位数的DA合成高位数的DA
    4-20mA电流转换电路分析
    C语言写的俄罗斯方块
    无源RS232转RS485(转)
    稻盛和夫写的六项精进指的是什么
  • 原文地址:https://www.cnblogs.com/yalphait/p/9234317.html
Copyright © 2011-2022 走看看