存题

组合-亢龙无悔
Problem:108
Time Limit:1000ms
Memory Limit:65536K
Description
为了打击金人入侵大宋的嚣张气焰,洪七公决定将自己降龙十八掌的“亢龙无悔”传给帮中的弟子,但还不能谁都传,必须有选择的传授,即从每个分舵的共N名弟子中,传给其中的M人,共有多少种方法呢?
Input
数据有多组数据,每组数据占一行。
每组数据包含两个整数N(分舵的总人数,1<=N<=10),M(实际传授的人数0<=M<=10)
Output
每组数据输出一个整数C(N,M),每个输出占一行。
Sample Input
3 2
5 3
4 4
3 6
8 0
Sample Output
3
10
1
0
1
Hint
本题3分
Source
陈宇

#include <stdio.h>
#include <stdlib.h>
typedef long long LL;
LL jc(int n)
{
    int i;
    LL ans=1;
    for(i=1;i<=n;i++)
        ans*=i;
    return ans;
}
int main()
{
    int n,m,ans;
    while (scanf("%d%d",&n,&m)!=-1)
    {
        ans=jc(n)/(jc(m)*jc(n-m));
        printf("%d\n",ans);
    }
    return 0;
}

分数大战
Problem:110
Time Limit:1000ms
Memory Limit:65536K
Description
给你2个分数,求他们的和,并要求和为最简形式。
Input
输入数据有多组,每组数据1行,每行包含四个正整数a,b,c,d(都大于0且小于1000),表示两个分数a/b 和 c/d。
Output
对于每组测试数据,输出两个整数e和f,表示a/b + c/d的最简化结果是e/f,每组输出占一行。
Sample Input
1 2 1 3
4 3 2 3
Sample Output
5 6
2 1
Hint
Source
陈宇

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a,b,c,d,e,f,ans;
    while(cin>>a>>b>>c>>d)
    {

        e=a*d+b*c;
        f=b*d;
        for(int i=2;i<=10000;i++)
        {

            if(e%i==0&f%i==0)
            {
                e=e/i;f=f/i;i=2}

        }

cout<<e<<" "<<f<<endl;
 e=0;f=0;
    }
    return 0;
}

勇敢的心
Problem:111
Time Limit:1000ms
Memory Limit:65536K
Description
做人要有勇气,林大学子都应该如此。比如我们今天的考试就应该做到“勇敢”为上。
每次考试的第一个题目总是很简单,今天也不例外,本题是要求输出指定大小的"ACM"字符串,特别地,为了体现“勇敢”二字,我们要求输出的字符串也是正方形的(行数和列数相等)。
Input
输入数据有多组,每组1行,每行包含一个正整数M(M<=50),表示一行内有M个“ACM”相连。
Output
输出指定大小的方形字符串,输出格式参见样本数据。
Sample Input
1
2
Sample Output
ACM
ACM
ACM
ACMACM
ACMACM
ACMACM
ACMACM
ACMACM
ACMACM
Hint
Source
杭电

#include <stdio.h>

int main()

{

    int n,i,j;

    while(scanf("%d",&n)!=-1)

    {

        for(i=1;i<=n*3;i++)

        {

            for(j=1;j<=n;j++)

                printf("ACM");

            printf("\n");

        }

    }

    return 0;

}
废弃做法,莫名多一倍
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int m,len;
    string stu="ACM",stu1;
    while(cin>>m)
    {
        for(int i=1;i<m;i++)
        {
            stu=stu+stu;
        }

        len=stu.size();
        for(int i=1;i<=len;i++)
        {
            for(int j=1;j<=m;j++)
                cout<<stu<<endl;
        }
    }
    return 0;
}

素数和
Problem:1085
Time Limit:1000ms
Memory Limit:65536K
Description
求出n个数中的素数和。(20分)
Input
输入数据有1组,分2行,第1行为整数n(0<n<10),接下来第2行为输入的n个具体整数值ai(n>=3,1<=ai<=10000),求ai中的素数之和。
Output
在一行内输出结果。
Sample Input
5
3 5 8 11 14
Sample Output
19
Hint
Source

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n,a[20000],k,ans;
    while(cin>>n)
    {
        ans=0;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        for(int i=1;i<=n;i++)
        {
            k=0;
            for(int j=2;j<a[i];j++)
            {
                if(a[i]%j==0) k=1;break;//重要,需要一个跳一次
            }
              if(k==0)
            {
                ans=ans+a[i];
            }
        }

        cout<<ans<<endl;
    }
    return 0;
}

The Hardest Problem Ever
Problem:60
Time Limit:1000ms
Memory Limit:65536K
Description
Julius Caesar生活在一个危险而又充斥着阴谋的时代。Caesar面对的最难的情况关系着他的存亡。为了让自己生存,他决心去创造第一种加密方法之一。这个加密方法听起来是这样的令人难以置信,没有一个人可以指出它(的原文)除非知道它怎样工作。
你是Caesar军队的一个分队长。你的工作是破译Caesar送来的信息并汇报给你的上级。
密码很简单,每一个字母对应着一个明文,你将明文向右五步来得到安全的信息。(比如,假如那个字母是‘A’,密文就是‘F’)当你将Caesar的信息中找出明文后,你要反过来做:
加密文本
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
密文中只有字母被切换了,非字母的字符应该保持不变,所有的字母都是大写的。

Input
这个问题的输入包括一系列(非空)最多100个数据。每一个数据的格式会按照以下格式,并且在不同组数据间不会有空行分隔。所有的字符都是大写的。
一个单独的测试数据包括三个部分:

  1. 开始行:单独的一行“START” 。
  2. 加密的信息:单独的一行,由1~200个字符组成来自Caesar的一行信息。
  3. 结束行:单独的一行“END” 。
    最后一组测试数据结束会跟着单独的一行“ENDOFINPUT”。
    Output
    对每一个测试数据只会有一行输出。它是Caesar的原文。
    Sample Input
    START
    NS BFW, JAJSYX TK NRUTYFSHJ FWJ YMJ WJXZQT TK YWNANFQ HFZXJX
    END
    START
    N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
    END
    START
    IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
    END
    ENDOFINPUT
    Sample Output
    IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
    I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME
    DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE
    Hint
    Source
#include <bits/stdc++.h>

using namespace std;

int main()
{
    string a;
    while(getline(cin,a))
    {
        if(a=="ENDOFINPUT")break;
        if(a!="START"&&a!="END")
        {
            for(i=0;i<a.length();i++)
            {
                if(a[i]>='A'&&a[i]<='Z')
                a[i]=(a[i]-'A'+21)%26+'A';
            }
            for(i=0;i<a.length();i++)
            printf("%c",a[i]);
            printf("\n");
        }
            
    }
    return 0;
}

上网统计-vector/map
Problem:1676
Time Limit:1000ms
Memory Limit:65535K
Description
在一个网络系统中有 N 个用户、M 次上网记录。每个用户可以自己注册一个用户名,每个用户名是一个只含小写字母且长度小于 1000 的字符串。每个上网的账号每次上网都会浏览网页,网页名是以一个只含小写字母且长度小于 1000 的字符串,每次上网日志里都会有记录,现在请统计每个用户每次浏览了多少个网页。
Input
单组输入。
第 1 行包含两个用 1 个空格隔开的正整数 N(1≤N≤1000)和 M(1≤M≤5000)。
第 2~M+1 行,每行包含 2 个用 1 个空格隔开的字符串,分别表示用户名和浏览的网页名。
Output
共 N 行,每行的第一个字符串是用户名,接下来的若干字符串是这个用户依次浏览的网页名(之间用一个空格隔开)。按照用户名出现的次序排序输出。
Sample Input
5 7
goodstudyer bookshopa
likespacea spaceweb
goodstudyer bookshopb
likespaceb spaceweb
likespacec spaceweb
likespacea juiceshop
gameplayer gameweb
Sample Output
goodstudyer bookshopa bookshopb
likespacea spaceweb juiceshop
likespaceb spaceweb
likespacec spaceweb
gameplayer gameweb
Hint
注意:一个人多次浏览了同一个网页时,不必去重
Source

无剑无我
Problem:112
Time Limit:1000ms
Memory Limit:65536K
Description
北宋末年,奸臣当道,宦官掌权,外侮日亟,辽军再犯。时下战火连连,烽烟四起,哀鸿遍野,民不聊生,又有众多能人异士群起而反,天下志士云集响应,景粮影从。
值此危急存亡之秋,在一个与世隔绝的地方—林大试验林场,一位江湖人称<兴安黑熊>的人正在为抗击辽贼研究剑法,终于于一雷电交加之夜精确计算出了荡剑回锋的剑气伤害公式。
定义 f(x, y, m, n) = sqrt(xx + yy + mm + nn - 2mx - 2ny);
hint : sqrt表示开方,即sqrt(4) = 2; sqrt(16) = 4;

(其中x,y为位置变量,m,n为属性常量)
剑气伤害 = f(x, y, a, b) + f(x, y, c, d);
剑气威力巨大无比,实难控制,现在他想知道剑气伤害的最小伤害值。
Input
输入数据有多组,每组占1行: 输入四个实数a,b,c,d均小于等于100
Output
输出剑气的最小伤害值M,保留小数点后一位 (可以使用.1lf)
Sample Input
0 0 3 4
4 0 0 3
Sample Output
5.0
5.0
Hint
本题2分
Source
等于求两点距离

#include <bits/stdc++.h>
using namespace std;
int main()
{
    double a,b,c,d,m;
    while(cin>>a>>b>>c>>d)
    {
        m=0;
        m=sqrt((a-c)*(a-c)+(b-d)*(b-d));
        printf("%.1lf\n",m);
    }
    return 0;
}

沧海明月
Problem:113
Time Limit:1000ms
Memory Limit:65536K
Description
“沧海明月”是武当派武功的入门功夫,用来攻击直线上的敌人,同时招数变化太快、太多。设招数变化次数为N,如何计算小于N的正整数中与N互素的数有多少个?张三丰不会,林大的大侠们,你们会吗?
Input
输入数据有多组,每组一行就1个数N,代表招数变化的值。其中N大于0,小于10000。
Output
输出小于N的正整数中与N互素的个数。规定:1和任何大于1的正数都互素。
Sample Input
10
12
17
Sample Output
4
4
16
Hint
Source
欧拉函数才能搞出求小于n的整数中与n互质的个数

while(cin>>x)//小于n的整数中与n互质的个数模板
    {
        y=x;
        k=(int)sqrt(double(x)+0.5);
        for(int i=2;i<=k;i++)
        {
            if(y%i==0)
            {
                x=x/i*(i-1);
                while(y%i==0)
                y=y/i;
            }
        }
        if(y>1)
        x=x/y*(y-1);
        cout<<x<<endl;


斐波那契的整除
Problem:115
Time Limit:1000ms
Memory Limit:65536K
Description
已知斐波那契数列有如下递归定义,f(1)=1,f(2)=1, 且n>=3,f(n)=f(n-1)+f(n-2),它的前几项可以表示为1, 1,2 ,3 ,5 ,8,13,21,34…,现在的问题是想知道f(n)的值是否能被3和4整除,你知道吗?
Input
输入数据有若干组,每组数据包含一个整数n(1< n <1000000000)。
Output
对应每组数据n,若 f(n)能被3整除,则输出“3”; 若f(n) 能被4整除,则输出“4”;如果能被12整除,输出“YES”;否则输出“NO”。
Sample Input
4
6
7
12
Sample Output
3
4
NO
YES
Hint
(斐波那契数重要性质:gcd(fn,fm)=f(gcd(n,m)),给出数列前几项1,1,2,3,5,8,13…

f4=3,f6=8,由以上性质可得,如果4能整除n,那么3=f4能整除fn;同理可得,如果6能整除n,那么8=f6能整除fn,即4能整除fn;)打表找规律的题

#include <bits/stdc++.h>
using namespace std;
int n;
int main()
{
    while(cin>>n)
    {
        if(n%12==0)printf("YES\n");
        else
        {
            if(n%4==0)printf("3\n");
            else if(n%6==0)printf("4\n");
            else printf("NO\n");
        }
    }
    return 0;
}

前进
Problem:157
Time Limit:1000ms
Memory Limit:65536K
Description
轻松通过墓碑,进入古墓后,才发现里面别有洞天。
突然,Yifenfei发现自己周围是黑压压的一群蝙蝠,个个扇动翅膀正准备一起向他发起进攻!
形势十分危急!
好在此时的yifenfei已经不是以前那个经常被lemon抢走MM的菜鸟了!面对众多蝙蝠的嗜血狂攻,只见yifenfei使出轻灵的剑法,刷,刷,刷,瞬间搞定……
现已知yifenfei使用了2招(剑招A和剑招B):剑招A,一招能杀死一半的蝙蝠。但是如果当前的蝙蝠数为奇数,那么就必须先出一招剑招B杀死其中任意一个,使蝙蝠数为偶数,再出剑招A。
现在请问:杀死n只蝙蝠需要使出多少招剑招B?

Input
输入数据首先给出一个整数C,表示测试组数。
然后是C组数据,每组包含一个正整数n (c和n都小于2^31)。

Output
对应每组数据,请输出一个整数,表示yifenfei使用的剑招B的数目,每组输出占一行。
Sample Input
2
1
5
Sample Output
1
2
Hint
Source
杭电oj

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int c,b,t;
    cin>>c;
    while(c--)
    {
        t=0;
        cin>>b;
        while(b)//循环,蝙蝠被杀完时停止
        {
            if(b%2==1)
        {
            t++;
            b=b-1;
        }
            b=b/2;
        }
      cout<<t<<endl;
    }
    return 0;
}

壮志难酬
Problem:170
Time Limit:1000ms
Memory Limit:65536K
Description
话说MCA山上各路豪杰均出山抗敌,去年曾在江湖威名显赫的,江湖人称<万军中取上将首级舍我其谁>的甘露也不甘示弱,“天将降大任于斯人也,必先劳其筋骨,饿其体肤,空乏其身”他说。可惜,由于去年取上将首级时不慎右手右关节第七次骨折,养伤达一年之久,空有一腔抱负却壮志难酬,如今天下危亡,习武之人又怎能袖手旁观,于是他决定出山协助威士忌共抗辽贼,这时他的对头枫冰叶子出现,两人都是水属性,但由于十年前的一场恩怨(这是后话)势成水火。

枫冰叶子要求甘露回答一个问题,否则不让他离开,可惜甘露绞尽脑汁未果,希望你来帮他解决,助他完成大业。

问题是这样的:给你一个小数x,让你算出小数点后第n位是什么,(1 <= n <= 6)

Input
首先输入一个t,表示有t组数据,跟着t行:
每行输入一个小数(输入数据保证一定是1.b的形式,为了简单化问题,没有循环小数的情况,且b的长度 <= 10)
然后跟一个n,表示小数点后第几位。
Output
输出一个数表示小数点后第n位的数

Sample Input
3
1.234 1
2.345 2
3.456 3
Sample Output
2
4
6
Hint
用double能存下
Source
hdu
看成一个字符串来做

#include <stdio.h>
#include <string.h>
int main()
{
    int a,n,cas,i,len;
    char ans[1000];
    scanf("%d",&cas);
    while (cas--)
    {
        scanf("%d.%s %d",&a,ans,&n);
        len=strlen(ans);
        if(n<=len)
            printf("%c\n",ans[n-1]);
        else
            printf("0\n");
    }
    return 0;
}

非常I+J
Problem:171
Time Limit:1000ms
Memory Limit:65536K
Description
定义:1个正整数的第i位表示从个位数开始算起(1位)一直算到第i位的那个数。
问题:给你2个正整数,请你计算第1个数的第i位和第2个数的第j位之和。
Input
输入数据有多组,每组2行,每行2个数。第1行1个大数a和i(第i位),第2行1个大数b和j(第j位),(1 <=a或b的位数 <=100)。
Output
输出a的第i位和b的第j位之和。
Sample Input
1111111111111111111111111111111111 3
44444444444444444444444444444444444444 7
Sample Output
5
Hint
Source

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    char a[200];
    char b[200];
    ll x,y;
    while(cin>>a>>x>>b>>y)//直接输入a和b字符串
    {
        int lena=strlen(a);
        int lenb=strlen(b);

        cout<<a[lena-x]-'0'+b[lenb-y]-'0'<<endl;

    }
    return 0;
}

汉诺塔
Problem:896
Time Limit:1000ms
Memory Limit:65536K
Description
现在有三根柱子(分别在左边,中间,右边),最左边柱子上有n个圆盘,从小到大依次摞着,现在我想把这n个圆盘移动到最右边的柱子上。
移动必须满足如下要求:
(1):每个圆盘不能直接从最左边移到最右边(必须经过中间的杆子),同时也不能直接从最右边移到最左边。
(2):在移动的过程中必须保证小盘在大盘上面

Input
输入数据由多行组成,每行包含一个整数n(1<=n<=35)。
Output
对于每个测试样例,输出将n个盘移到最右边的最少次数。
Sample Input
1
3
12
Sample Output
2
26
531440
Hint
用递推的思想,先考虑规模为N-1的情况,再考虑由N-1扩展到N。
Source
递归题

字符串处理-string
Problem:2132
Time Limit:1000ms
Memory Limit:65535K
Description
给出一个字符串S,计算S中有多少连续子串是回文串。
Input
输入包含多组测试数据。每组输入是一个非空字符串,长度不超过5000
Output
对于每组输入,输出回文子串的个数
Sample Input
aba
aa
Sample Output
4
3
Hint
输入样例二:
aaaaaa
输出样例二:
21
有一个新函数

华山登峰
Problem:221
Time Limit:1000ms
Memory Limit:65536K
Description
华山古称“西岳”,是我国著名的五岳之一,位于陕西省华阴市境内,距西安 120 公里,海拔2154.9米。它南接秦岭,北瞰黄渭,扼守着古代中国心脏地区,--古称“天府之国”的长安关中地区进出中原的门户,素有“奇险天下第一山”之称。
现在的华山有东、西、南、北、中五峰,主峰有南峰“落雁”、东峰“朝阳”、西峰“莲花”,三峰鼎峙,“势飞白云外影倒黄河里”,人称“天外三峰”。还有云台、玉女二峰相辅于侧, 36 小峰罗列于前,虎踞龙盘,气象森森,因山上气候多变,形成“云华山”、“雨华山”、“雾华山”、“雪华山”给人以仙境美感。是所谓的西京王气之所系。
自古华山一条路啊,这条路的坡度是45度,都是石头做的梯子,虽然大家都练过武当的纵云梯,但是爬上还是要满足规则的,即你每次只能选择往上上1个台阶或3个台阶,刚开始你站在第0个台阶上,初始条件为你到第1层,第2层,第3层台阶的方法数都为1。让你计算你到达第N 层台阶的方法数。
Input
输入包含多组数据,每组数据包含1个数N ( 4 <= N <=100)

Output
对于输入的每一组数据,输出仅包括一行,输出到达第N 层的方法数。
Sample Input
80
4
Sample Output
7960463650791
2
Hint
Source
nefu

#include <bits/stdc++.h>

using namespace std;

int main()
{
    long long n,a[10000];
a[1]=a[2]=a[3]=1;
        for(int i=4;i<=100;i++)
        {
            a[i]=a[i-1]+a[i-3];
        }
        while(cin>>n)
        {cout<<a[n]<<endl;}

    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值