HYNU 第二次周赛题解

问题 A: 小明A+B

题目描述
小明今年3岁了, 现在他已经能够认识100以内的非负整数, 并且能够进行100以内的非负整数的加法计算. 对于大于等于100的整数, 小明仅保留该数的最后两位进行计算, 如果计算结果大于等于100, 那么小明也仅保留计算结果的最后两位. 例如, 对于小明来说: 1) 1234和34是相等的 2) 35+80=15 给定非负整数A和B, 你的任务是代表小明计算出A+B的值.
输入

输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两个非负整数A和B(A和B均在int型可表示的范围内).
输出

对于每组测试数据, 输出小明A+B的结果.
样例输入

2
35 80
15 1152
样例输出

15
67

简单题:

#include<stdio.h>
int main()
{
    int a,b,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&a,&b);
        printf("%d\n",(a%100+b%100)%100);
    }
}

问题 B: See You Again!

题目描述

It’s been a long day without you my friend , And i’ll tell you all about it when i see you again, We’ve come a long way from blah blah blah …. OK, let’s come back ! And today ,your task is to print N! ,i don’t know whether you guys still remember last time you encountered the similar problem ,Print the pattern N,but today ,your task isn’t print the pattern anymore, it’s print the result of N!, ok, try it!
输入

Given an integer N(0 ≤ N ≤ 12), your task is to calculate N!

One N in one line, process to the end of file.
输出

For each N, output N! in one line.
样例输入

1
2
3
样例输出

1
2
6
根据阶乘定义用循环求

#include<stdio.h>
int fact[15]={1,1};
int main()
{
    for(int i=2;i<14;i++)fact[i]=i*fact[i-1];
    int n;
    while(~scanf("%d",&n))
    {
        printf("%d\n",fact[n]);
    }
}

问题 C: 字符串解压缩

题目描述

突发奇想的鲜花想到一种字符串的压缩格式,即如果一个字符串中存在4个或4个以上的连续相同字符X,假设个数为q,那么在相应的位置用[qX]代替之,比如ABBBBBCDEEEEF可以表示成A[5B]CD[4E]F,在字符串很长的情况下,能够起到一定的压缩作用。字符串压缩程序已经被写出来,但是光有压缩程序还不够,必须还要有配套的解压缩程序将其还原成原来的字符串,粗心的鲜花并没有想到这一点,现在你有机会露一手了,来将这个问题解决吧!
输入

多组样例输入,每个样例一个压缩字符串
输出

输出解压缩后的字符串(解压缩后的字符串长度不超过5000000)
样例输入

A[5B]CD[4E]F
ABC
样例输出

ABBBBBCDEEEEF
ABC

需要注意的是q可能是大于10的,所以要先将字符转换成数字,再循环输出相同的就行了

#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
string s;
int main()
{
    while(cin>>s)
    {
        for(int i=0;i<s.length();i++)
        {
            if(s[i]=='[')
            {
                int x=0;
                int j=i+1;
                while(s[j]<='9'&&s[j]>='0')
                {
                    x*=10;
                    x+=s[j]-'0';
                    j++;
                }
                while(x--)printf("%c",s[j]);
                i=j+1;
            }
            else printf("%c",s[i]);
        }
        printf("\n");
    }
}

问题 D: 正直含蓄的平均数,中位数,众数

题目描述

给你n个数,请用正直含蓄的方法求出他们的平均数,中位数,众数。
输入

输入包含多组,每组两行,第一行包含一个n(1

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<string>
#include<map>
using namespace std;
int n,a[105];
map<int,int>nm;
int main()
{
    while(~scanf("%d",&n))
    {
        nm.clear();
        int sum=0,nummax=0;
        double num;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum+=a[i];
            nm[a[i]]++;
            if(nm[a[i]]>nummax)
            {
                nummax=nm[a[i]];
                num=a[i];
            }
        }
        sort(a,a+n);
        double medium=(n%2==0)?(1.0*(a[n/2]+a[n/2-1])/2):(a[n/2]);
        printf("%.3lf\n%.3lf\n%.3lf\n\n",1.0*sum/n,medium,num);
    }
}

问题 E: F VS H

题目描述

HXY和FJC玩了一个游戏,有一堆石头含有n(n>=1)个石子,他们轮流从这堆石头里拿石子,规定每次可以取1到3个,最后取走石子的人获胜,HXY和FJC都十分聪明,且HXY先手,问谁会获胜。

输入

多组输入

输入包括一个整数n(1<=n<=10^6)。
输出

输出包括一行
如果HXY赢输出HXY,否则输出FJC。

样例输入

1
4
样例输出

HXY
FJC

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        printf("%s\n",n%4==0?("FJC"):("HXY"));
    }
}

问题 F: 整除64

题目描述

给你一个二进制数n(n的长度不超过100.),判断能否通过删除n的某些位上的数,使之成为64的正整数倍。

如10001000->1000000=64。

输入

多组输入,每组包含一个二进制数n。
输出

输出包括一行,yes或者no。
样例输入

100
10001000
样例输出

no
yes

64的二进制是1000000,所以只需统计第一个1后面0的个数是否大于等于6,大于等于6可以将多余的1和0删掉使数变成64.

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<string>
#include<map>
#define ll long long
using namespace std;
int main()
{
    char s[105];
    while(~scanf("%s",s))
    {
        ll n=0;
        bool flag=false;
        for(int i=0;i<strlen(s);i++)
        {
            if(flag&&s[i]=='0')n++;
            if(s[i]=='1')flag=true;
        }
        printf("%s\n",(n>=6)?("yes"):("no"));
    }
}

问题 G: FJC的趴踢

题目描述

FJC举办了一场生日party,剩下了n瓶没有喝光的可乐(每瓶剩下的体积不一定相同,瓶子的容积也不一定相同,不要问我为什么可乐会有这么多种规格!!),他想把剩下的可乐都倒两个瓶子里去,然后放进冰箱冰一会继续喝,因为冰箱只能装下两瓶可乐,他能够把可乐全部一次放下去吗?
输入
多组输入,每组输入包括三行

第一行:一个整数n,代表了剩下的可乐瓶数。(0 < n <= 10000)
第二行:n个数,分别代表了每瓶可乐剩下的体积ai。(0<=ai<=10^9)
第三行:n个数,分别代表了每瓶可乐瓶子的容积bi。(ai<=bi<=10^9)
输出
输出一行
如果能,输出“YES”,否则输出“NO”。
样例输入

2
3 5
3 6
3
6 8 9
6 10 12
样例输出

YES
NO

找出可乐罐容积最大的两个,是看否能装下剩下所有的可乐即可。

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<string>
#include<map>
#define ll long long
using namespace std;
int main()
{
    int sum,n,maxNum,secNum;
    while(~scanf("%d",&n))
    {
        int a;
        sum=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a);
            sum+=a;
        }
        maxNum=0x80000000;
        secNum=0x80000000;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a);
            if(a>maxNum)
            {
                secNum=maxNum;
                maxNum=a;
            }
            else if(a>secNum)secNum=a;
        }
        printf("%s\n",((secNum+maxNum>=sum)||(n<=2))?("YES"):("NO"));
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值