或是代码有的写的比较丑,标题部分皆为揭阳OJ标题

小技巧:本文在此之前由csdn自动生成了多个目录,不必下拉二个三个去找,可透过目录标题直接定位。

     
 申明:标题部分皆为明州OJ标题,代码部分含有AC代码(大概持续三个)和标程。

本文转发自自身的csdn博客,复制过来的,排版就不弄了,欢迎转载。

     
 由于大数难题用c/c++写相比麻烦,而Java的大数类又很好用,所以基本为java代码。实际上比赛很少会考大数难点,因为竞赛是比的算法,而不是语言特征,可是很多都是大数据,数据上千万级其他,所以算法又很重庆大学,显著那和那篇博客也没啥关系。

声明:

      题目不是太难,大家和作者就权当学习或复习下Java吧O(∩_∩)O~。

      
题目部分皆为新乡OJ标题。

     
该分类铜陵oj地址:http://acm.nyist.edu.cn/JudgeOnline/problemset.php?typeid=7 .
   
 本文由csdn-jtahstu原创,转发请申明出处,欢迎志同道合的恋人一道交换学习。本身QQ:1373758426和博客链接:blog.csdn.net/jtahstu

   
代码部分含有AC代码(也许持续3个)和最优代码,大多数都是自身写的,并且超过十分之五为c代码和少部分c++代码and极少java代码,但中央都以c语言知识点,没有太多差距,或许代码有的写的可比丑,毕竟知识有限。

ok , 开始Y(^o^)Y

   言语入门部分题基本都较为简单,是上学编制程序入门的很好练习,也是ACM的首先步,入门的一流艺术,望认真对待。

P28、

  
 本文由csdn-jtahstu原创,转发请申明出处,欢迎志同道合的情侣一起调换学习。自己QQ:1373758426和csdn博客地址,链接:http://blog.csdn.net/jtahstu

 

  
该分类秦皇岛OJ地址:自家是地方,链接:http://acm.nyist.edu.cn/JudgeOnline/problemset.php?typeid=1

命局阶乘

时刻范围:三千 ms  |  内部存款和储蓄器限制:65535 KB

难度:3

 

描述

咱俩都知道怎么着总结三个数的阶乘,但是,假若这一个数极大呢,大家该怎么着去总结它并出口它?

 

输入

输入三个整数m(0<m<=5000)

输出

输出m的阶乘,并在出口结束今后输入一个换行符

样例输入

50

样例输出

30414093201713378043612608166064768844377641568960512000000000000

来源

经文标题

上传者

张云聪

 

 #include<stdio.h>
int a[1000001];
int main()
{
    int n;
    scanf("%d",&n);
    int len=1;
    a[1]=1;
    for(int i=2; i<=n; ++i)
    {
        int b=0;
        for(int j=1; j<=len; ++j)
        {
            int t=a[j]*i+b;
            a[j]=t%10;
            b=t/10;
            if(j==len&&b!=0)
                len++;
        }
    }
    for(int i=len; i>0; --i)
        printf("%d",a[i]);
    printf("\n");
}   

 

 

 

#include<stdio.h>//标程
#include<string.h>
const int maxn=20000;
int a[maxn];
int main() {
    int n,i,j,s,c;
    scanf("%d",&n);
    memset(a,0,sizeof(a));
    a[0]=1;
    for(i=2; i<=n; i++) {
        c=0;
        for(j=0; j<=maxn; j++) {
            s=a[j]*i+c;
            a[j]=s%10;
            c=s/10;
        }
    }
    for(j=maxn; j>=0; j--) if(a[j]) break;
    for(i=j; i>=0; i--) printf("%d",a[i]);
    printf("\n");
    return 0;
}

 

Now begin

P45、

1、

棋盘覆盖

直接给链接吧,那题的图复制过来有标题,http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=45

时限:两千 ms  |  内部存款和储蓄器限制:65535 KB

难度:3

描述
在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被遮住,如图1(k=2时),现用一缺角的2×2方格(图2为内部缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求供给接近图2方格总的个数s。如k=1时,s=1;k=2时,s=2
                                                                       
           

输入
率先行m表示有m组测试数据;
每一组测试数据的率先行有3个整数数k;

输出
输出所需个数s;

样例输入
3123

样例输出
1521

 

 

 

 /*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=45
 * by jtahstu on 2015/3/31 20:00
 * (2^(2*k))/3 就是这个结果
 */
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static Scanner cin = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        int T = cin.nextInt();
        while (T-- != 0) {
            int k = cin.nextInt();
            BigInteger ans=BigInteger.valueOf(2);
            System.out.println(ans.pow(2*k).divide(BigInteger.valueOf(3)));

        }
    }
}

 

 

 #include<iostream>//标程
#include<string.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int a[100];
        memset(a,0,sizeof(a));
        int size;
        cin>>size;
        a[0]=1;
        if(size==1)
            cout<<a[0]<<endl;
        int i,j,k;
        for(i=2;i<=size;++i)
        {
            for(j=0;j<100;++j)
                a[j]=4*a[j];
            a[0]++;
            for(j=0;j<99;++j)
            {
                a[j+1]+=a[j]/10;
                a[j]=a[j]%10;
            }
        }
        for(i=99;i>=0;--i)
            if(a[i]) break;
        for(j=i;j>=0;--j)
            cout<<a[j];
        cout<<endl;
    }
    return 0;
}        

 

P73、

 

 

比大小

岁月范围:贰仟 ms  |  内部存款和储蓄器限制:65535 KB

难度:2

 

描述
给你七个极大的数,你能否看清出她们多个数的轻重呢?

比如123456789123456789要大于-123456

 

输入
每组测试数据占一行,输入八个不超过一千位的10进制整数a,b
多士大夫障输入的a,b没有前缀的0。
只要输入0 0意味输入实现。测试数据组数不超过10组

输出
假使a>b则输出“a>b”,假如a<b则输出“a<b”,借使相等则输出“a==b”。

样例输入
111111111111111111111111111 88888888888888888888
-1111111111111111111111111 22222222
0 0

样例输出
a>b
a

 

 

 #include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1, s2;
    while (cin >> s1 >> s2,s1[0] != '0' && s2[0] != '0')
    {
        if (s1[0] == '-' && s2[0] != '-')
        {
            cout << "a<b" << endl;
        }
        else if (s2[0] == '-' && s1[0] != '-')
        {
            cout << "a>b" << endl;
        }
        else
        {
            if (s1[0] == '-' && s2[0] == '-')   //为负数
            {
                if (s1.size() > s2.size())
                    cout << "a<b" << endl;
                else if (s1.size() < s2.size())
                    cout << "a>b" << endl;
                else if(s1 > s2) cout<<"a<b"<<endl;
                else if(s1 < s2) cout<<"a>b"<<endl;
                else cout << "a==b" << endl;
            }
            else   //为正数
            {
                if (s1.size() > s2.size())
                    cout << "a>b" << endl;
                else if (s1.size() < s2.size())
                    cout << "a<b" << endl;
                else if(s1 > s2) cout<< "a>b" <<endl;
                else if(s1 < s2) cout<< "a<b" <<endl;
                else cout << "a==b" << endl;
            }
        }
    }
}//Orz AC

 

 

 #include<iostream>//标程
#include<string>
using namespace std;
int main()
{
    string a,b; 
    while(cin>>a>>b)
    {
        if(a=="0"&&b=="0")
            return 0;
        if(a==b)
            cout<<"a==b"<<endl;
        else if(a[0]=='-'&&b[0]=='-')
            {
                if(a.substr(1,string::npos)>b.substr(1,string::npos)||a.length()>b.length())
                    cout<<"a<b"<<endl;
                else cout<<"a>b"<<endl;
            }
        else if(a>"0"&&b>"0"||a<"0"&&b<"0"&&a.length()>b.length()||a>b)
                cout<<"a>b"<<endl;
        else if(a<"0"&&b>"0"&&a.length()>b.length()||a>b)
                cout<<"a<b"<<endl;   
    }
}        

 

P103

 

A+B Problem

时刻限定:3000ms  |  内存限制:65535 KB

难度:0

描述
此题为练手用题,请我们总计一下a+b的值

输入
输入七个数,a,b

输出
输出a+b的值

样例输入
2 3

样例输出
5

提示
例如:
C语言版:

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

C++版:

#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}

Java版:

import java.io.*;
import java.util.*;
public class Main
{
public static void main(String args[]) throws Exception
{
Scanner cin=new Scanner(System.in);
int a=cin.nextInt(),b=cin.nextInt();
System.out.println(a+b);
}
}

Java jdk 1.4 版

import java.io.*;
import java.util.*;

public class Main
{
public static void main (String args[]) throws Exception
{
BufferedReader stdin =
new BufferedReader(
new InputStreamReader(System.in));

String line = stdin.readLine();
StringTokenizer st = new StringTokenizer(line);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(a+b);
}
}

请留意不要输出过多提醒性语句(如:“please input two
numbers”),否则会WrongAnswer的

#include<stdio.h>
int main()
{
   int a,b;
   scanf("%d%d",&a,&b);
   printf("%d\n",a+b);
} 
 
#include<iostream>
main(){std::cout<<(1<<31)-1;}        

A+B Problem II

时光限定:2000 ms  |  内部存款和储蓄器限制:65535 KB

难度:3

 

描述
I have a very simple problem for you. Given two integers A and B, your
job is to calculate the Sum of A + B.

A,B must be positive.

 

输入
The first line of the input contains an integer T(1<=T<=20) which
means the number of test cases. Then T lines follow, each line consists
of two positive integers, A and B. Notice that the integers are very
large, that means you should not process them by using 32-bit integer.
You may assume the length of each integer will not exceed 1000.

输出
For each test case, you should output two lines. The first line is “Case
#:”, # means the number of the test case. The second line is the
anequation “A + B = Sum”, Sum means the result of A + B. Note there are
some spaces int the equation.

样例输入
2
1 2
112233445566778899 998877665544332211

样例输出
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110

 

 

 /*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=103
 * by jtahstu on 2015/2/12 20:00
 * hdu 1002
 */
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int main() {
    int n,count=0,m;
    string a1,b1;
    cin>>n;m=n;
    while(n--) {
        int a[1001]= {0},b[1001]= {0};
        count++;
        cin>>a1>>b1;
        for(int i=0; i<a1.size(); i++)//大数相加算法
            a[i]+=a1[a1.size()-i-1]-'0';
        for(int i=0; i<b1.size(); i++)
            b[i]+=b1[b1.size()-i-1]-'0';
        for( int i = 0 ; i < 1001; i++ ) {
            a[i] += b[i] ;
            if( a[i] >= 10 ) {
                a[i+1] += a[i]/10 ;
                a[i]%=10;
            }
        }
        int i;
        for(i = 1000 ; i >= 0; i -- ) {
            if( a[i] != 0 )break;
        }
        cout<<"Case "<<count<<":"<<endl;
        cout<<a1<<" "<<"+"<<" "<<b1<<" "<<"="<<" ";
        for(; i>=0; i--)
            cout<<a[i];
        cout<<endl;
//    if(count!=m)//最后一行不能多一个换行,bt
//        cout<<endl;
    }
    return 0;
}

 

 

 

 import java.math.BigInteger;//标程
import java.util.Scanner;
public class Main{
    public static void main(String args[]) {
       Scanner cin=new Scanner(System.in);
       int n=cin.nextInt();
       BigInteger a,b;
       for(int i=1;i<=n;i++){
           a=cin.nextBigInteger();
           b=cin.nextBigInteger();
           System.out.println("Case "+i+":");
           System.out.println(a.toString()+" + "+b.toString()+" = "+a.add(b));
       }
    }
}        

 

P114

 

4、

某种系列

时限:三千 ms  |  内部存款和储蓄器限制:65535 KB

难度:4

 

描述
数列A满足An = An-1 + An-2 + An-3, n >= 3 
编写程序,给定A0, A1 和 A2, 计算A99

 

输入
输入包括多行数据 
每行数据包涵二个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000) 
数据以EOF结束

输出
对此输入的每一行输出A99的值

样例输入
1 1 1

样例输出
69087442470169316923566147

 /*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=803
 * by jtahstu on 2015/3/31 20:00
 */
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static Scanner cin = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        BigInteger res[] = new BigInteger[105];
        while (cin.hasNext()) {
            res[0] = cin.nextBigInteger();
            res[1] = cin.nextBigInteger();
            res[2] = cin.nextBigInteger();
            for (int i = 3; i <= 99; i++) {
                res[i] = res[i - 1].add(res[i - 2]).add(res[i - 3]);
            }
            System.out.println(res[99]);
        }
    }
}       

 #include<stdio.h>//标程
#include<string.h>
#include <stdlib.h>
void add(char a[],char b[],char back[])
{
    int i,j,k,up,x,y,z,l;
    char *c;
    if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
    c=(char *) malloc(l*sizeof(char));
    i=strlen(a)-1;
    j=strlen(b)-1;
    k=0;up=0;
    while(i>=0||j>=0)
    {
        if(i<0) x='0'; else x=a[i];
        if(j<0) y='0'; else y=b[j];
        z=x-'0'+y-'0';
        if(up) z+=1;
        if(z>9) {up=1;z%=10;} else up=0;
        c[k++]=z+'0';
        i--;j--;
    }
    if(up) c[k++]='1';
    i=0;
    c[k]='\0';
    for(k-=1;k>=0;k--)
        back[i++]=c[k];
    back[i]='\0';
} 
int main()
{
    char a[3][1000],temp[1000];
    int roll=3;
    while(scanf("%s%s%s",a[0],a[1],a[2]) !=EOF)
    {
        for (int i=3;i<=99;i++)
        {
            add(a[(i-1)%3],a[(i-2)%3],temp);
            add(temp,a[(i-3)%3],a[i%3]);
        }
        printf("%s\n",a[0]);
    }
}        

 

P155

 

ASCII码排序

时限:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
输入多个字符(能够再一次)后,按各字符的ASCII码从小到大的一一输出那八个字符。

输入
率先行输入2个数N,表示有N组测试数据。后边的N行输入多组数据,每组输入数据都以占一行,有八个字符组成,之间无空格。

输出
对于每组输入数据,输出一行,字符中间用1个空格分开。

样例输入
2
qwe
asd

样例输出
e q w
a d s

来源
网络

上传者
naonao

#include<stdio.h>
#define MAX 3
char a[MAX];
int main() {
    int n;
    scanf("%d\n", &n);
    while (n--) {
        char x, y, z;
        scanf("%s", a);
        x = a[0];
        if (a[1] < x)
            x = a[1];
        if (a[2] < x)
            x = a[2];
        z = a[2];
        if (a[1] > z)
            z = a[1];
        if (a[0] > z)
            z = a[0];
        y = a[0] + a[1] + a[2] - x - z;
        printf("%c %c %c\n", x, y, z);
    }
    return 0;
}

#include "stdio.h"//最优程序
main()
{
    char a,b,c,d;
    int i;
    scanf("%d",&i);
    getchar();
    while(i--)
    {
        scanf("%c%c%c",&a,&b,&c);
        getchar();
        if (a>b) {d=a;a=b;b=d;}
        if (a>c) {d=a;a=c;c=d;}
        if (b>c) {d=b;b=c;c=d;}
        printf("%c %c %c\n",a,b,c);

    }

}

11、

求高精度幂

光阴限制:三千 ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
对数值极大、精度很高的数举行高精度总括是一类卓殊宽广的题材。比如,对国债举办测算便是属于这类难题。 

最近要你化解的难题是:对一个实数LAND( 0.0 < 奥迪Q5 < 99.999
),须求写程序标准计算 Odyssey 的 n 次方(PRADOn),在那之中n 是整数并且 0
< =n <= 25。

输入
输入有多行,每行有三个数途乐和n,空格分开。Evoque的数字位数不超越10人。

输出
对此每组输入,须求输出一行,该行包含精确的 PRADO 的 n
次方。输出须要去掉前导的 0 后并非的 0 。假使出口是整数,不要输出小数点。

样例输入
95.123 120.4321 205.1234 156.7592 998.999 101.0100 12

样例输出
548815620517731830194541.899025343415715973535967221869852721.0000000514855464107695612199451127676715483848176020072635120383542976301346240143992025569.92857370126648804114665499331870370751166629547672049395302429448126.76412102161816443020690903717327667290429072743629540498.1075960194566517745610440100011.126825030131969720661201

 

 

 /*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=155
 * by jtahstu on 2015/3/31 20:00
 */
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
    public static Scanner cin = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        BigDecimal rBigDecimal;
        int n;
        while (cin.hasNext()) {
            rBigDecimal = cin.nextBigDecimal();
            n = cin.nextInt();
            /*
             * BigDecimal ans=BigDecimal.ONE; for (int i = 0; i <n; i++) {
             * ans=ans.multiply(rBigDecimal); }
             * System.out.println(ans.stripTrailingZeros().toPlainString());
             */
            String str = rBigDecimal.pow(n).stripTrailingZeros()
                    .toPlainString();
            if (str.startsWith("0"))//需要删除小数点前面的0,我去
                str = str.substring(1);
            System.out.println(str);
        }
    }

} 

 

 

 import java.util.Scanner;//标程
import java.math.BigDecimal;
/**
 *
 * @author Administrator
 */
public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        BigDecimal d1=null;
        int p;
        String s1;
        String s;
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext()){
           s1=cin.next();
           p=cin.nextInt();
           d1=new BigDecimal(s1);
           s=d1.pow(p).stripTrailingZeros().toPlainString();
           for(int i=0;i<s.length();i++){
                if(i==0&&s.charAt(i)=='0')
                    continue;
                System.out.print(s.charAt(i));
           }
           System.out.println();
        }
    }
}        

 

P513

 

奇偶数分离

日子限制:3000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
有三个整型偶数n(2<= n
<=一千0),你要做的是:先把1到n中的全体奇数从小到大出口,再把具备的偶数从小到大出口。

输入
先是行有2个整数i(2<=i<30)表示有 i 组测试数据;
每组有三个整型偶数n。

输出
首先行输出全体的奇数
其次行输出全数的偶数

样例输入
2
10
14

样例输出
1 3 5 7 9
2 4 6 8 10

1 3 5 7 9 11 13 
2 4 6 8 10 12 14 

来源
[苗栋栋]原创

上传者
苗栋栋

# include"stdio.h"
int main() {
    int i, b, c, d, j, k;
    scanf("%d", &i);
    for (d = 0; d < i; d++) {
        scanf("%d", &b);
        for (k = 1; k <= b; k++) {
            if ((k % 2) == 1)
                printf("%d ", k);
        }
        printf("\n");
        for (j = 1; j <= b; j++) {
            if ((j % 2) == 0)
                printf("%d ", j);
        }
        printf("\n");
    }
    return 0;
}

#include<stdio.h>//最优程序
int main() {
    int n;
    scanf("%d", &n);
    int a;
    while (n--) {
        scanf("%d", &a);
        for (int i = 1; i <= a; i += 2)
            printf("%d ", i);
        puts("");
        for (int i = 2; i <= a; i += 2)
            printf("%d ", i);
        puts("");
    }
}

13、

A+B Problem IV

时刻范围:一千 ms  |  内部存储器限制:65535 KB

难度:3

 

描述
acmj方今察觉在运用总括器总结高精度的天数加法时很不便宜,于是他想着能或无法写个程序把这么些题材给消除了。

 

输入
含有多组测试数据
每组数据包涵多个正数A,B(或者为小数且位数不超过400)

输出
每组输出数据占一行,输出A+B的结果,结果需尽管最简的款型。

样例输入
1.9 0.1
0.1 0.9
1.23 2.1
3 4.0

样例输出
2
1
3.33
7

<pre name="code" class="java"> /*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=513
 * by jtahstu on 2015/3/31 19:00
 */
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
    public static Scanner cin = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        BigDecimal abigDecimal, bbigDecimal;
        while (cin.hasNext()) {
            abigDecimal = cin.nextBigDecimal();
            bbigDecimal = cin.nextBigDecimal();
            if (abigDecimal.add(bbigDecimal).compareTo(BigDecimal.ZERO) == 0)
                System.out.println("0");
            else
                System.out.println(abigDecimal.add(bbigDecimal)
                        .stripTrailingZeros().toPlainString());
        }
    }
}        

 #include <stdio.h>//标程
#include <string.h>
#define MAX 1000
char a[MAX],b[MAX],c[MAX];
int main()
{
    int i,j,k,l,m,n,la,lb,mx;
    char ch;
    memset(a,'0',sizeof(a));
    memset(b,'0',sizeof(b));
    while(~scanf("%s%s",a,b))
    {
        la=strlen(a);
        lb=strlen(b);
        a[la]='0';
        b[lb]='0';
        i=0;
        while((a[i]-'.')&&i<la)
        {
            i++;
        }
        if(i==la)
            a[la]='.';
        j=0;
        while((b[j]-'.')&&j<lb)
        {
            j++;
        }
        if(j==lb)
            b[lb]='.';
        m=(la-i)>(lb-j)?(la-i):(lb-j);
        if(i>=j)
        {
            for(l=mx=i+m,k=0,j=i-j;l>=0;l--)
            {
                if(a[l]=='.')
                {
                    c[l]='.';
                    continue;
                }
                ch=(l-j)<0?'0':b[l-j];
                c[l]=(a[l]-'0'+ch-'0'+k)%10+'0';
                k=(a[l]-'0'+ch-'0'+k)/10;
            }
        }
        else
        {
            for(l=mx=j+m,k=0,j=j-i;l>=0;l--)
            {
                if(b[l]=='.')
                {
                    c[l]='.';
                    continue;
                }
                ch=(l-j)<0?'0':a[l-j];
                c[l]=(ch-'0'+b[l]-'0'+k)%10+'0';
                k=(ch-'0'+b[l]-'0'+k)/10;
            }
        }
        if(k>0)
            printf("%d",k);
        while(c[mx]=='0')
            mx--;
        if(c[mx]=='.')
            mx--;
        for(i=0;i<=mx;i++)
            printf("%c",c[i]);
        printf("\n");
        memset(a,'0',sizeof(a));
        memset(b,'0',sizeof(b));
    }
}                

 

P517

 

Fibonacci数

时刻范围:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
无穷数列1,1,2,3,5,8,13,21,34,55…称为Fibonacci数列,它能够递归地定义为
F(n)=1 ………..(n=1或n=2)
F(n)=F(n-1)+F(n-2)…..(n>2)
现要你来求第n个斐波纳奇数。(第①个、第贰个都为1)

输入
先是行是2个整数m(m<5)表示共有m组测试数据
老是测试数据只有一行,且唯有三个整形数n(n<20)

输出
对每组输入n,输出第n个Fibonacci数

样例输入
3
1
3
5

样例输出
1
2
5

来源
经典标题

上传者
张云聪

#include <stdio.h>
int F(int n) {
    if (n == 1 || n == 2) {
        return 1;
    } else {
        return F(n - 1) + F(n - 2);
    }
}

int main() {
    int i, n;
    scanf("%d", &i);
    while (i--) {
        scanf("%d", &n);
        printf("%d\n", F(n));
    }
    return 0;
}

#include<stdio.h>//最优程序
main()
{
    int m,n,i,s1,s2;
    scanf("%d",&m);
    while(m--)
    {   scanf("%d",&n);
        for(i=3,s1=s2=1;i<=n;i++)
        {
            s1=s1+s2;s2=s1-s2;
        }
        printf("%d\n",s1);
    }
}

22、

最小公倍数

时光限定:一千 ms  |  内存限制:65535 KB

难度:3

 

描述
为什么1小时有60分钟,而不是玖21分钟呢?那是野史上的习惯导致。

但也不用纯粹的偶然:60是个杰出的数字,它的因数相比多。

事实上,它是1至6的种种数字的倍数。即1,2,3,4,5,6都以足以除尽60。

 

大家愿意物色到能除尽1至n的的每种数字的蝇头整数m.

 

输入
多组测试数据(少于500组)。
每行唯有二个数n(1<=n<=100).

输出
出口相应的m。

样例输入
2
3
4

样例输出
2
6
12

 

 

 /*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=517
 * by jtahstu on 2015/3/31 20:00
 */
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    static BigInteger jt(BigInteger a,BigInteger b)
    {
        return (b.compareTo(BigInteger.valueOf(0))==0)?a:jt(b, a.mod(b));
    }
    static BigInteger tt(BigInteger a,BigInteger b)
    {
        return a.multiply(b).divide(jt(a, b));
    }
    public static Scanner cin = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        BigInteger res[]=new BigInteger[105];
        int n;
        res[1]=BigInteger.valueOf(1);
        for(int i=2;i<=100;i++){
            res[i]=tt(BigInteger.valueOf(i), res[i-1]);
        }
        while(cin.hasNext()){
            n=cin.nextInt();
            System.out.println(res[n]);
        }
    }
}      

 #include <math.h>//标程
#include <stdio.h>
#include <string.h>
const int M = 120;
bool not_prime[M];
int prime[30], point[30];
struct Ac
{
    int num[50];
    int len;
}ans;
void ac_table()
{
    int top = -1;
    for(int i=2;i<M;i++)
        if(not_prime[i] == false)
        {
            prime[++top]=i;
            for(int j=2*i;j<M;j+=i)
                not_prime[j] = true;
        }
}
void Init()
{
    memset(point,0,sizeof(point));
    memset(ans.num,0,sizeof(ans.num));
    ans.num[0] = 1;
    ans.len = 0;
}
void my_pow(Ac &c,int x)
{
    for(int i=0;i<=c.len;i++)
        c.num[i] *= x;
    for(int i=0;i<=c.len;i++)
        if(c.num[i] >= 10000)
        {
            c.num[i+1] += c.num[i]/10000;
            c.num[i]    = c.num[i]%10000;
        }
    c.len = c.num[c.len+1]==0 ? c.len : c.len+1;
}
void Print(Ac &c)
{
    for(int i=c.len;i>=0;i--)
        printf(i==c.len? "%d" : "%04d",c.num[i]);
    printf("\n");
}
void divide(int x)
{
    for(int i=0;prime[i]<=x;i++)
    {
        int tmp = 0;
        while(x%prime[i]==0)
        {
            tmp++;
            x /= prime[i];
        }
        if(tmp > point[i])
        {
            my_pow(ans,pow(prime[i] ,tmp - point[i]));
            point[i] = tmp;
        }
    }
}
int main()
{
    int n;
    ac_table();
    while(~scanf("%d",&n))
    {
        Init();
        for(int i=2;i<=n;i++)
            divide(i);
        Print(ans);
    }
    return 0;
}       

 

P524

 

素数求和难题

时刻限定:2000ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
当今给您N个数(0<N<一千),未来供给你写出一个顺序,找出那N个数中的全数素数,并求和。

输入
首先行给出整数M(0<M<10)代表有个别组测试数据
每组测试数据第贰行给你N,代表该组测试数据的数据。
接下去的N个数为要测试的数目,各样数稍差于1000

输出
每组测试数据结果占一行,输出给出的测试数据的享有素数和

样例输入
3
5
1 2 3 4 5
8
11 12 13 14 15 16 17 18
10
21 22 23 24 25 26 27 28 29 30

样例输出
10
41
52

来源
[hzyqazasdf]原创

上传者
hzyqazasdf

#include<stdio.h>
#include<math.h>
int main() {
    int i, j, k, a, n, m, sum = 0;
    scanf("%d", &a);
    for (i = 0; i < a; i++) {
        scanf("%d", &n);
        for (j = 0; j < n; j++) {
            scanf("%d", &m);
            for (k = 2; k <= sqrt(m); k++) {
                if (m % k == 0)
                    break;
            }
            if (k > sqrt(m) && m != 1)
                sum = sum + m;
        }
        printf("%d\n", sum);
        sum = 0;
    }
    return 0;
}

#include<stdio.h>//最优程序
#include <math.h>
int main()
{
    int m,n,i,j,a[1000],flag=0;
    long s;
    scanf("%d",&m);
    while(m--)
    {
        s=0;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        for(i=0;i<n;i++)
        {
            if(a[i]==1) continue;
            flag=0;
            for(j=2;j<=sqrt(a[i]);j++)
            {
                if(a[i]%j==0)
                {flag=1;break;}         
            }
            if(flag==0) s+=a[i];
        }
    printf("%d\n",s);
    }
    return 0;
}        

24、

A-B Problem

岁月范围:一千 ms  |  内部存款和储蓄器限制:65535 KB

难度:3

 

描述
A+B难题早已经被大家所熟稔了,是还是不是十分的低级庸俗啊?未来大家来做一下A-B吧。

方今有两个实数A和B,聪明的您,能或不能够判定出A-B的值是或不是等于0呢?

 

输入
有多组测试数据。每组数据蕴涵两行,分别代表A和B。
它们的位数小于100,且各种数字前中恐怕带有+,- 号。
各种数字后面和前边都恐怕有盈余的0。
每组测试数据后有一空行。

输出
对此每组数据,输出一行。
一旦A-B=0,输出YES,不然输出NO。

样例输入
1
1

1.0
2.0

样例输出
YES
NO

 

 

 /*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=524
 * by jtahstu on 2015/3/31 20:00
 */
import java.math.BigDecimal;
import java.util.Scanner;

public class Main {
    public static Scanner cin = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        BigDecimal a,b;
        while(cin.hasNext()){
            a=cin.nextBigDecimal();
            b=cin.nextBigDecimal();
            //cin.nextLine();//这里留意下
            if(a.compareTo(b)==0)
                System.out.println("YES");
            else {
                System.out.println("NO");
            }
        }
    }

}

 

 

#include <stdio.h>//标程
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
const int M=100;
void back(char* c,int &l)
{
    if(strchr(c,'.') == NULL)
        return ;
    for(int i=l-1;i>=1;i--)
    {
        if(c[i]!='0')
            break;
        l--;
    }
    if(c[l-1]=='.')
        l--;
    c[l]='\0';
    //puts("after back->");
    //puts(c);
}
void front(char* c,int &l,bool &f)
{
    int cnt = isdigit(c[0]) ? 0 : 1;
    if(c[0]=='-')
        f = false;
    for(int i=cnt;i<l-1;i++)
    {
        if(c[i+1]=='.' || c[i]!='0')
            break;
        cnt++;
    }
    if(cnt)
    {
        for(int i=0;i<l-cnt;i++)
            c[i] = c[i+cnt];
        c[l-cnt] = '\0';
    }
    //puts("after front->");
    //printf(f?"+ ":"- ");
    //puts(c);
}
void deal(char *c,bool &f)
{
    int l = strlen(c);
    f = true;
    back(c,l);
    front(c,l,f);
}
bool Cmp(char* A,char* B,bool a,bool b)
{
    if(strcmp(A,B) == 0)
    {
        if(strcmp(A,"0") == 0 || a^b == 0)
            return true;
    }
    return false;
}
int main()
{
    char A[M],B[M];
    bool a,b;
    while(~scanf("%s%s",A,B))
    {
        deal(A,a);
        deal(B,b);
        puts(Cmp(A,B,a,b)?"YES":"NO");
    }

    return 0;
}        

 

P655

 

素数距离难点

时刻限定:两千ms  |  内部存储器限制:65535 KB

难度:2

描述
后天提交你有个别数,要求你写出一个顺序,输出这一个整数相邻方今的素数,并出口其距离长度。要是左右有等距离长度素数,则输出右侧的值及相应距离。
若果输入的整数本人正是素数,则输出该素数本人,距离输出0

输入
首先行提交测试数据组数N(0<N<=一千0)
接下去的N行每行有3个整数M(0<M<壹仟000),

输出
每行输出五个整数 A B.
内部A表示离相应测试数据以来的素数,B表示个中的离开。

样例输入
3
6
8
10

样例输出
5 1
7 1
11 1

来源
经文标题

上传者
hzyqazasdf

#include<stdio.h>
#include<math.h>
bool judge(int m);
int main()
{
    int N,n,i;
    scanf("%d",&N);
    while(N--)
    {
        scanf("%d",&n);
        if(judge(n))
        {
            printf("%d 0\n",n);
            continue;
        }
        for(i=1; n-i!=-1; i++)
        {
            if(judge(n-i))
            {
                printf("%d %d\n",n-i,i);
                break;
            }
            if(judge(n+i))
            {
                printf("%d %d\n",n+i,i);
                break;
            }
        }
    }
    return 0;
}
bool judge(int m)
{
    if(m==0||m==1)
        return false;
    int i;
    for(i=2; i<=sqrt(m); i++)
    {
        if(m%i==0)break;
    }
    if(i>sqrt(m))
        return true;
    return false;
}

#include<iostream>//最优程序
#include<cmath>
using namespace std;

bool isprime(int n)
{
    for(int k=2;k<=sqrt((double)n);k++)
        if((n%k)==0)
            return false;
    return true;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int num,i,j;        
        cin>>num;
        if(num==1)
        {
            cout<<"2 1"<<endl;
            continue;
        }
        for(i=num;!isprime(i);i--); 
        for(j=num;!isprime(j);j++); 

        if((num-i)<(j-num))
            cout<<i<<' '<<(num-i)<<endl;
        else if((num-i)>(j-num))
            cout<<j<<' '<<(j-num)<<endl;
        else if((num-i)==(j-num))
            cout<<i<<' '<<(num-i)<<endl;
    }
}                

25、

光棍的yy

时光范围:一千 ms  |  内存限制:65535 KB

难度:2

 

描述
yy平日遇上多个想不到的事务,每当他看时间的时候总会看见11:11,这几个很纠结啊图片 1/nyoj5.0/acm.nyist.net/JudgeOnline/admin/kind/plugins/emoticons/1.gif)。

今昔给你m个1,你可以把叁个1组合成贰个2,那样就不是光棍了图片 2/nyoj5.0/acm.nyist.net/JudgeOnline/admin/kind/plugins/emoticons/13.gif),问那样的结缘有稍许种??

比如说(111  能够拆分为 111 12 21  有二种)

 

输入
第3行输入1个n表示有n个测试数据
以下n行,每行输入m个1
(1 <= n,m <= 200)

输出
出口那种组合种数,占一行

样例输入
3
11
111
11111

样例输出
2
3
8

import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static Scanner cin = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        int n = cin.nextInt();
        BigInteger a[] = new BigInteger[201];
        a[1] = BigInteger.valueOf(1);
        a[2] = BigInteger.valueOf(2);
        for (int i = 3; i <= 200; i++)
            a[i] = a[i - 1].add(a[i - 2]);//递推,只是这是大数
        while (n-- > 0) {
            String s;
            s = cin.next();
            int len = s.length();
            System.out.println(a[len]);
        }
    }
}        

P773

 

 

A Famous Music Composer

时限:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
Mr. B is a famous music composer. One of his most famous work was his
set of preludes. These 24 pieces span the 24 musical keys (there are
musically distinct 12 scale notes, and each may use major or minor
tonality). The 12 distinct scale notes are: 

 A     A#=Bb  B        C       C#=Db D       D#=Eb  E       F        F#=Gb  G       G#=Ab

 

Five of the notes have two alternate names, as is indicated above with
equals sign. Thus, there are 17 possible names of scale notes, but only
12 musically distinct notes. When using one of these as the keynote for
a musical key, we can further distinguish between major and minor
tonalities. This gives 34 possible keys, of which 24 are musically
distinct. 

In naming his preludes, Mr. B used all the keys except the following 10,
which were named instead by their alternate names: 

 Ab minor  A# major A# minor  C# major  Db minor
 D# major  D# minor Gb major  Gb minor  G# major 

Write a program that, given the name of a key, give an alternate name if
it has one, or report the key name is unique. 

输入
Each test case is described by one line having the format “note
tonality”, where “note” is one of the 17 names for the scale notes given
above, and “tonality” is either “major” or “minor” (quotes for clarify).

输出
For each case output the required answer, following the format of the
sample.

样例输入
Ab minor
D# major
G minor

样例输出
Case 1: G# minor
Case 2: Eb major
Case 3: UNIQUE

来源
hdu

上传者
李如兵

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

char str[100];
int cas = 1;

int main()
{
    while(gets(str))
    {
        printf("Case %d: ",cas++);
        int i,j,len;
        len = strlen(str);
        if(str[1] == ' ')
            printf("UNIQUE\n");
        else
        {
            if(str[1] == '#')
            {
                if(str[0] == 'G')
                    printf("Ab");
                else
                    printf("%cb",str[0]+1);
            }
            else if(str[1] == 'b')
            {
                if(str[0] == 'A')
                printf("G#");
                else
                printf("%c#",str[0]-1);
            }
            for(i = 2;i<len;i++)
            printf("%c",str[i]);
            printf("\n");
        }
    }

    return 0;
}

#include<iostream>//最优程序
#include<string>
using namespace std;
string trans(string a){
    string b="";
    if(a[1]=='#'){
        b+=char((a[0]-'A'+1)%7+'A');
        b+='b';
    }else{
        b+=char((a[0]-'A'+6)%7+'A');
        b+='#';
    }
    return b;
}
int main(){
    string a,b;
    for(int t=1; cin>>a>>b; t++){
        cout<<"Case "<<t<<": ";
        if(a.length()==1)
            cout<<"UNIQUE"<<endl;
        else
            cout<<trans(a)<<" "<<b<<endl;
    }
    return 0;
}

31、

开方数

岁月限制:500 ms  |  内部存款和储蓄器限制:65535 KB

难度:3

 

描述
于今给您多个数 n 和 p ,让你求出 p 的开 n 次方。

 

输入
每组数据包蕴三个数n和p。当n和p都为0时意味着输入完成。(1<=n<=200,1<=p<=10^101)

输出
对于每种输出对用输出开药方后的结果k(结果小于10^9)。

样例输入
2 16
3 27
7 4357186184021382204544
0 0

样例输出
4
3
1234

 

 

import java.util.Scanner;

public class Main {
    public static Scanner input = new Scanner(System.in);
    public static void main(String[] args) {
        while (true) {
            int n = input.nextInt();
            double p = input.nextDouble();
            if (n == 0 && p == 0)
                break;
            System.out.println(String.format("%.0f", Math.pow(p, 1.0 / n)));
        }
    }
}

 

 #include <stdio.h>//标程
#include <string.h>
#include <math.h>
int main()
{
    //freopen("Input.txt","r",stdin);
    //freopen("Output1.txt","w",stdout);
    long mid,left,right;
    double p;
    int n;
    while(~scanf("%d%lf",&n,&p)){
        if(n==0 && p==0.0) break;
        left=0,right=1000000000;
        while(left<right)
        {
            mid=(left+right)/2;
            if(pow(mid,n)==p) break;
            if(pow(mid,n)<p)left=mid;
            if(pow(mid,n)>p)
                right=mid;
        }
        //printf("%lf\n",p);
        printf("%ld\n",mid);
    }
    return 0;
}

P803

 

 

多少个数求最值

日子范围:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
规划1个从伍个整数中取最小数和最大数的次第

输入
输入唯有一组测试数据,为七个不高于1万的正整数

输出
输出八个数,第二个为那多个数中的最小值,第三个为那七个数中的最大值,多少个数字以空格格开。

样例输入
1 2 3 4 5

样例输出
1 5

来源
C语言课本第⑥章第壹题

上传者
张云聪

#include<stdio.h>
int main() {
    int a[5], temp, i, j;
    for (i = 0; i < 5; i++)
        scanf("%d", &a[i]);
    for (j = 0; j < 5; j++)
        for (i = 0; i < 4; i++)
            if (a[i] > a[i + 1]) {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
    printf("%d %d", a[0], a[4]);
    return 0;
}
 
#include<iostream>//最优程序
#include<iterator>
#include<algorithm>
using namespace std;
int main()
{
    int a[5];
    copy(istream_iterator<int>(cin),istream_iterator<int>(),a);
    cout<<*min_element(a,a+5)<<" "<<*max_element(a,a+5)<<endl;
}        

33、

A/B Problem

时限:一千 ms  |  内部存款和储蓄器限制:65535 KB

难度:3

 

描述
 做了A+B Problem,A/B
Problem不是怎么难点了吗!图片 3/nyoj5.0/uva.onlinejudge.org/external/104/p10494.html)

 

输入
每组测试样例一行,首先贰个号码A,中间七个或多个空格,然后3个标记( /
大概 %
),然后又是空格,后边又是一个号码B,A恐怕会相当短,B是三个int范围的数。

输出
出口结果。

样例输入
110 / 100
99 % 10
2147483647 / 2147483647
2147483646 % 2147483647

样例输出
1
9
1
2147483646

 

 

 

 /*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=803
 * by jtahstu on 2015/3/31 20:00
 */

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static Scanner cin = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        String string;
        BigInteger a,b;
        while(cin.hasNext()){
            a=cin.nextBigInteger();
            string=cin.next();
            b=cin.nextBigInteger();
            if(string.compareTo("/")==0)
                System.out.println(a.divide(b));
            else 
                System.out.println(a.mod(b));

        }
    }
}

 

  大数分类里就那12道题,Java复习的如何了哟?接下去应该会写分类的STL练习,容小编先把题A完再来写,这几天应该就能够了。(*^-^*)

 

蛇形填数

时光限定:两千ms  |  内部存款和储蓄器限制:65535 KB

难度:3

描述
在n*n方陈里填入1,2,…,n*n,须要填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

输入
一向输入方陈的维数,即n的值。(n<=100)

输出
输出结果是蛇形方陈。

样例输入
3

样例输出
7 8 1
6 9 2
5 4 3

来源
算法经典

上传者
COO

#include"stdio.h"
#include<stdlib.h>
int main()
{
    int a[109][109]= {0},i,j,k,n,m,top,x,y;
    top=1;
    scanf("%d",&n);
    a[x=0][y=n-1]=1;
    while(top<n*n)
    {
        while(x+1<n&&!a[x+1][y]) a[++x][y]=++top;
        while(y-1>=0&&!a[x][y-1]) a[x][--y]=++top;
        while(x-1>=0&&!a[x-1][y]) a[--x][y]=++top;
        while(y+1<n&&!a[x][y+1]) a[x][++y]=++top;
    }

    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)

            printf("%d ",a[i][j]);
        printf("\n");
    }
    //system("33.exe\n");
}
 
#include<stdio.h>//最优程序
int main()
{
    int a,b,c,d,n,sum=1;
    int yi[101][101];
    scanf("%d",&n);
    for(a=0;a<=(n-1)/2;a++)
    {
        for(b=a;b<=n-a-1;b++)
            yi[b][n-a-1]=sum++;
        for(b=n-2-a;b>=a;b--)
            yi[n-a-1][b]=sum++;
        for(b=n-a-2;b>=a;b--)
            yi[b][a]=sum++;
        for(b=a+1;b<n-a-1;b++)
            yi[a][b]=sum++;
    }
    for(c=0;c<n;c++)
    {
        for(d=0;d<n;d++)
            printf("%d ",yi[c][d]);
        printf("\n");
    }
}        

34、

神帅韩信点兵

时光范围:3000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述

传神帅韩信才智过人,从不直接清点自身军队的人数,只要让战士先后以多个人一排、三个人一排、7个人一排地变换队形,而他老是只掠一眼阵容的排尾就精晓总人数了。输
入1个非负整数a,b,c
,表示种种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数一点都不小于10,不超过100

输入
输入二个非负整数a,b,c
,表示种种队形排尾的人头(a<3,b<5,c<7)。例如,输入:2 4 5

输出
输出总人数的最小值(或报告无解,即出口No answer)。实例,输出:89

样例输入
2 1 6

样例输出
41

来源
经文算法

上传者
老董

#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    int n=(a*70+b*21+c*15)%105;
    if(n>100||n<10) cout<<"No answer"<<endl;
    else cout<<n<<endl;
}   

39、

水仙花数

光阴限制:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:0

描述
请判断1个数是否水仙花数。
里头水仙花数定义各种位数立方和相当它自个儿的三位数。

输入
有多组测试数据,每组测试数据以含有叁个整数n(100<=n<一千)
输入0表示程序输入完结。

输出
假定n是水仙花数就输出Yes
不然输出No

样例输入
153
154
0

样例输出
Yes
No

来源
C语言课本习题改编

上传者
张云聪

#include "stdio.h"
int main(int argc, char const *argv[])
{
    int n=0;
    //freopen("input.txt","r",stdin);
    while(scanf("%d",&n)==1)
    {
        if(n!=0)
        {
            if (n==153||n==370||n==371||n==407) printf("Yes\n");
            else printf("No\n");
        }
    }
    return 0;
}
  
#include<iostream>//最优程序
using namespace std;
int main()
{
    int a;
    while(1)
    {
        cin>>a;
        if(a==0) break;
        cout<<((a==153||a==370||a==371||a==407)?"Yes":"No")<<endl;
    }
}        

40、

公约数和公倍数

时间限定:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
小明被多个题材给难住了,今后亟需您帮扶助。难点是:给出七个正整数,求出它们的最大公约数和最小公倍数。

输入
第二行输入三个整数n(0<n<=一千0),表示有n组测试数据;
随即的n行输入五个整数i,j(0<i,j<=32767)。

输出
出口每组测试数据的最大公约数和最小公倍数

样例输入
3
6 6
12 11
33 22

样例输出
6 6
1 132
11 66

来源
[苗栋栋]原创

上传者
苗栋栋

#include<stdio.h>
int main() {
    int a, b, c, n, k;
    scanf("%d", &n); //输入一个整数n(0<n<=10000),表示有n组测试数据 
    while (n--) {
        scanf("%d %d", &a, &b); //输入两个整数 
        k = a * b;
        while (b != 0) {
            c = a % b;
            a = b;
            b = c;
        }
        printf("%d %d\n", a, k / a);
    }
    return 0;
}
 
import java.io.*;
import java.util.*;

public class Main {

    public static int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }

    public static Scanner count = new Scanner(System.in);

    public static void main(String[] arges) {
        int n = count.nextInt();
        while ((n--) > 0) {
            int a = count.nextInt(), b = count.nextInt();
            System.out.println(gcd(a, b) + " " + a * b / gcd(a, b));
        }
        count.close();
    }
}
        
 
#include<stdio.h>
int main()
{
    unsigned int u,v,r,s,i,d;
    scanf("%u",&s);
    for(i=1;i<=s;i++)
    {
        scanf("%u%u",&u,&v);
        d=u*v;
        while(v!=0)
        {
            r=u%v;
            u=v;
            v=r;
        }
        printf("%u %u\n",u,d/u);
    }
    return 0;
}        

41、

多个数从小到大排序

光阴限制:3000ms  |  内存限制:65535 KB

难度:0

描述
今天要写三个顺序,完成给四个数排序的功效

输入
输入三个正整数

输出
给输入的多个正整数排序

样例输入
20 7 33

样例输出
7 20 33

来源
[张洁烽]原创

上传者
张洁烽

import java.util.Scanner;

public class Main
{
public static void main(String[] args)
    {
        int a,b,c,n;
        Scanner num=new Scanner(System.in);
        System.out.print("");
        a=num.nextInt();
        System.out.print("");
        b=num.nextInt();
        System.out.print("");
        c=num.nextInt();
        if(a>b) {
            n=a;a=b;b=n;
        }

        if(b>c) {
            n=b;b=c;c=n;
        }
        if(a>c) {
            n=a;a=c;c=n;
        }
        System.out.println(a+" "+b+" "+c);
    }
}
 
#include <stdio.h>//最优程序
int main()
{
    int a,b,c,an[3],i,t,j,max,flag;
    scanf ("%d %d %d",&an[0],&an[1],&an[2]);
    for (i=0;i<3;i++)
    {
        t=max=an[i];
        flag=i;
        for (j=i;j<3;j++)
            if (an[j]>t) 
            {
                max=an[j];
                flag=j;
            };
        t=an[i];
        an[i]=max;
        an[flag]=t;
    }
    for (i=2;i>=0;i--)
        printf ("%d ",an[i]);
    return 0;
}
       

56、

阶乘因式分解(一)

时限:2000ms  |  内存限制:65535 KB

难度:2

描述

输入
首先行是2个整数s(0<s<=100),表示测试数据的组数
跟着的s行, 每行有四个整数n,m。

输出
输出m的个数。

样例输入
2
100 5
16 2

样例输出
24
15

来源
网络

上传者
苗栋栋

#include <stdio.h>
int main(void) {
    int N, n, m, count;
    scanf("%d", &N);
    while (N--) {
        count = 0;
        scanf("%d%d", &n, &m);
        while (n) {
            n = n / m;
            count = count + n;
        }
        printf("%d\n", count);

    }
    return 0;
}
 
#include<iostream>//最优程序
using namespace std;
int get(int n,int num)
{
    if(n==0) return 0;
    else return get(n/num,num)+n/num;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int a,b;
        cin>>a>>b;
        cout<<get(a,b)<<endl;
    }
}        

**57、


6174问题

时刻限定:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
借使你有二个各位数字大有分化的五人数,把具备的数字从大到小排序后获得a,从小到大后收获b,然后用a-b替换原来那么些数,并且继续操作。例如,从
1234起身,依次能够获取4321-1234=308七 、8730-378=835贰 、8532-2358=6174,又赶回了它自身!未来要你写3个程序来判断多个几个人数经过多少次那样的操作能出现循环,并且求出操作的次数

譬如说输入1234进行顺序是1234->3087->8352->6174->6174,输出是4

输入
首先行输入n,代表有n组测试数据。
接下去n行每行都写2个各位数字大有径庭的3位数

输出
透过多少次地点描述的操作才能冒出循环

样例输入
1
1234

样例输出
4

来源
[张洁烽]原创

上传者
张洁烽

#include<stdio.h>
int main()
{
    int n,m,a[4],i,j,count,max,min,t;
    scanf("%d",&n);
    while(n--)
    {
        count=1;
        scanf("%d",&m);
        while(m!=6174)
        {
            for(i=0; i<4; i++)
            {
                a[i]=m%10;
                m=m/10;
            }
            for(i=0; i<4; i++)
                for(j=i+1; j<4; j++)
                    if(a[i]<a[j])
                    {
                        t=a[i];
                        a[i]=a[j];
                        a[j]=t;
                    }
            max=a[0]*1000+a[1]*100+a[2]*10+a[3];
            min=a[3]*1000+a[2]*100+a[1]*10+a[0];
            m=max-min;
            count++;
        }
        printf("%d\n",count);
    }
    return 0;
}
  
#include<iostream>//最优程序
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
    //freopen("1.txt","r",stdin);
    int k;
    cin>>k;
    while(k--)
    {
        int n,a[4],n1,n2;
        scanf("%d",&n);
        int s=1;
        while(n!=6174)
        {
            a[0]=n%10;
            a[3]=n/1000;
            a[1]=n/10%10;
            a[2]=n/100%10;
            sort(a,a+4);
            n1=1000*a[3]+100*a[2]+10*a[1]+a[0];
            n2=1000*a[0]+100*a[1]+10*a[2]+a[3];
            n=n1-n2;
            s++;
        }
        printf("%d\n",s);
    }
}        

**60、


什么人获得了最高奖学金

时限:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
    某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有七种,获取的原则各自不一样:
  1)
院士奖学金,每人柒仟元,期末平均成绩当先七十七分(>80),并且在本学期内刊登1篇或1篇上述散文的学生均可收获;
  2)
五四奖学金,每人四千元,期末平均战表超乎8四分(>85),并且班级评议成绩超越81分(>80)的学习者均可得到;
  3)
成绩卓绝奖,每人三千元,期末平均成绩超过九十分(>90)的学生均可获得;
  4)
西边奖学金,每人一千元,期末平均战绩超乎8五分(>85)的南部省份学生均可获得;
  5)
班级进献奖,每人850元,班级评议战绩抢先八十一分(>80)的学生干部均可得到;
  只要符合条件就足以得奖,每项奖学金的得奖人数并未界定,每名学生也能够同时获取多项奖学金。例如姚林的末尾平均成绩是87分,班级评议成绩八十四分,同时他还是壹人学生干部,那么他得以同时获取五四奖学金和班级进献奖,奖金总额是4850元。
  以往交由若干学员的相关数据,请计算哪些同学取得的奖金总额最高(要是总有同学能知足获得奖学金的规则)。

输入
第贰行输入数据N,表示测试数据组数(0<N<100),每组测试数据输入的首先行是三个整数X(1
<= X <=
100),表示学生的总和。接下来的X行每行是1位学生的数额,从左向右依次是真名,期末平均战表,班级评议成绩,是不是是学生干部,是不是是南部省份学生,
以及公布的舆论数。姓名是由大小写英文字母组成的尺寸不超越20的字符串(不含空格);期末平均成绩和班级评议成绩都以0到100里面包车型大巴平头(包含0和
100);是或不是是学生干部和是还是不是是西边省份学生分别用1个字符表示,Y表示是,N表示不是;发布的杂文数是0到10的整数(包含0和10)。每八个相邻数
据项之间用三个空格分隔。

输出
 
每组测试数据输出包含三行,第叁行是赢得最多奖金的学习者的人名,第1行是那名学员获得的奖金总额。要是有两位或两位以上的学员取得的奖金最多,输出他们内部在输入文件中冒出最早的学习者的人名。第一行是那X个学生得到的奖学金的总数。

样例输入
1
4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1

样例输出
ChenRuiyi
9000
28700

来源
NOIP2005

上传者
hzyqazasdf

#include <iostream>
using namespace std;
int main(void)
{
   string str,_str;
   char ca,cb;
   int n,m,x,y,z,s,sum,max;
   cin>>n;
   while(n--)
   {
      cin>>m;
      max = sum = 0;
      while(m--)
      { 
        s = 0;
        cin>>str>>x>>y>>ca>>cb>>z;
        if(x>80&&z>0)
        {
            s += 8000;
            sum += 8000;
        }
        if(x>85&&y>80)
        {
            s += 4000;
            sum += 4000;
        }
        if(x>90)
        {
            s += 2000;
            sum += 2000;
        }
        if(x>85&&cb == 'Y')
        {
            s += 1000;
            sum += 1000;
        }
        if(y>80&&ca == 'Y')
        {
            s += 850;
            sum += 850;
        }
        if(max < s)
        {
            max = s;
            _str = str;
        }
      }
      cout<<_str<<endl<<max<<endl<<sum<<endl;
   }    
}  
 
#include<iostream>//最优程序
#include<string>
#include<algorithm>
#include<numeric>
using namespace std;
int calc(int qm,int py,bool gb,bool xb,bool lw)
{
    int all=0;
    if(qm>80 && lw) all+=8000;
    if(qm>85&& py>80) all+=4000;
    if(qm>90) all+=2000;
    if(xb&&qm>85) all+=1000;
    if(gb&&py>80) all+=850;
    return all;
}

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int m;
        cin>>m;
        int max_num=0,all=0;
        string max_stu;
        while(m--)
        {
            int qm,py,lw;
            string xm,gbs,xbs;
            cin>>xm>>qm>>py>>gbs>>xbs>>lw;
            bool gb=gbs=="Y",xb=xbs=="Y";
            int num=calc(qm,py,gb,xb,lw>0);
            all+=num;
            if(num>max_num) {max_num=num;max_stu=xm;}
        }
        cout<<max_stu<<endl<<max_num<<endl<<all<<endl;
    }
}        

**62、


笨小熊

光阴限定:2000ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
笨小熊的词汇量极小,所以每一趟做意国语采取题的时候都很发烧。可是她找到了一种艺术,经考试验证,用那种措施去选用选项的时候选对的概率相当的大!
那种形式的现实性讲述如下:假诺maxn是单词中冒出次数最多的字母的面世次数,minn是单词中冒出次数最少的假名的出现次数,假使maxn-minn是二个质数,那么笨小熊就觉得那是个Lucky
Word,这样的单词很恐怕正是不利的答案。

输入
先是行数据N(0<N<100)表示测试数据组数。
每组测试数据输入只有一行,是一个单词,当中只恐怕出现小写字母,并且长度小于100。

输出
每组测试数据输出共两行,第贰行是3个字符串,借使输入的的单词是Lucky
Word,那么输出“Lucky Word”,不然输出“No Answer”;
第叁行是3个平头,借使输入单词是Lucky Word,输出maxn-minn的值,不然输出0

样例输入
2
error
olympic

样例输出
Lucky Word
2
No Answer
0

来源
NOIP2008

上传者
hzyqazasdf

#include<iostream>
#include<string>
using namespace std;
int prime_number(int n)
{
    if(n==1||n==0)return 0;
    if(n==2)return 1;
    else
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)return 0;
    }
    return 1;
}

int maxn_minn(string a)
{
    int b[101]={0};
    for(int i=0; i<a.size(); i++)
            for(int j=0; j<a.size(); j++)
            {
                if(a[i]==a[j])
                    b[i]++;
            }
            int maxn=b[0];
            int minn=b[0];
            for(int i=0;i<a.size();i++)
            {
                if(b[i]>maxn)maxn=b[i];
                if(b[i]<minn)minn=b[i];
            }
            return maxn-minn;
}

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        string a;
        cin>>a;
        prime_number(maxn_minn(a))==1?cout<<"Lucky Word\n"<<maxn_minn(a)<<endl:cout<<"No Answer\n"<<"0"<<endl;
    }
    return 0;
}
  
#include<iostream>//最优程序
#include<string>
#include<algorithm>
#include<numeric>
using namespace std;

bool isPrime(int n)
{
    if(n==0) return false;
    if(n==1) return false;
    if(n==2) return true;
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0) return false;
    }
    return true;

}
int min_e(int *p,int *q)
{
    int m=1000;
    for(int* i=p;i!=q;i++)
    {
        if(*i<m && *i!=0) m=*i;
    }
    return m;
}
int main()
{
        int n;
    string str;
    cin>>n;
    while(n--)
    {
        int count[26]={0};
        cin>>str;
        for(int i=0;i!=str.size();++i)
        {
            ++count[str[i]-'a'];
        }
        int nn=*max_element(count,count+26)-min_e(count,count+26);
        if(isPrime(nn)) cout<<"Lucky Word"<<endl<<nn<<endl;
        else cout<<"No Answer"<<endl<<0<<endl;

    }
}        

**64、


鸡兔同笼

日子范围:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的多少,若是无解,则输出“No
answer”(不要引号)。

输入
先是行输入二个数据a,代表接下去共有几组数据,在接下去的(a<10)
a行里,每行都有三个n和m.(0<m,n<100)

输出
输出鸡兔的个数,只怕No answer

样例输入
2
14 32
10 16

样例输出
12 2
No answer

来源
[张洁烽]原创

上传者
张洁烽

#include "stdio.h"
int main(int argc, char const *argv[])
{
    int i,m,n,N;
    scanf("%d",&N);
    while(N--)
    {
        int x,y,a=0;
        scanf("%d%d",&n,&m);
        for(i=0;i<=n;i++)
        {
            if(i*2+(n-i)*4==m)
            {
             a=1;
            printf("%d %d\n",i,n-i);break;
            }
        }
        if(a==0)printf("No answer\n");
    }
    return 0;
} 
 
#include<iostream>//最优程序
using namespace std;
int main()
{
   int n,a,b,p,q;
   cin>>n;
   while(n--)
   {
      cin>>a>>b;
      q=(b-2*a)/2;
      p=a-q;
      if(p<0 ||q<0 || b%2) cout<<"No answer"<<endl;
      else cout<<p<<" "<<q<<endl;
   }
}                        

**65、


另一种阶乘难点

时刻限定:两千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述

世家都精晓阶乘那个概念,举个大致的例证:5!=1*2*3*4*5.现行反革命大家引入一种新的阶乘概念,将原来的各样数相乘变为i非常的小于n的装有奇数相乘例如:5!!=1*3*5.今后通晓以往那种阶乘的趣味了吧!

近来你的天职是求出1!!+2!!……+n!!的正确值(n<=20)

输入
首先行输入3个a(a<=20),代表共有a组测试数据
接下去a行各行输入1个n.

输出
各行输出结果三个整数逍客表示1!!+2!!……+n!!的正确值

样例输入
2
3
5

样例输出
5
23

来源
[张洁烽]原创

上传者
张洁烽

#include <stdio.h>
int f(int n) {
    int i, s = 1;
    for (i = 1; i <= n; i += 2)
        s *= i;
    return s;
}
int main() {
    int a, n, i, s;
    scanf("%d", &a);
    while (a--) {
        s = 0;
        scanf("%d", &n);
        for (i = 1; i <= n; i++)
            s += f(i);
        printf("%d\n", s);
    }
    return 0;
}    
 
/*
#include<iostream>
using namespace std;
int f(int n)
{
    if(n%2) return n==1?1:n*f(n-2);
    return f(n-1);
}
int g(int n)
{
    return n?g(n-1)+f(n):0;
}
int main()
{
    int n,m;
    cin>>n;
    while(n--)
    {
        cin>>m;
        cout<<g(m)<<endl;
    }
}*/
#include<iostream>//最优程序
using namespace std;
int main()
{
    int n,m,r[]={0,1,2,5,8,23,38,143,248,1193,2138,12533,22928,158063,293198,2320223,4347248,38806673,73266098,727995173,1382724248};
    cin>>n;
    while(n--)
    {
        cin>>m;
        cout<<r[m]<<endl;
    }
}        

**72、


Financial Management

日子限制:三千ms  |  内存限制:65535 KB

难度:1

描述
Larry graduated this year and finally has a job. He’s making a lot of
money, but somehow never seems to have enough. Larry has decided that he
needs to grab hold of his financial portfolio and solve his financing
problems. The first step is to figure out what’s been going on with his
money. Larry has his bank account statements and wants to see how much
money he has. Help Larry by writing a program to take his closing
balance from each of the past twelve months and calculate his average
account balance.

输入
The input will be twelve lines. Each line will contain the closing
balance of his bank account for a particular month. Each number will be
positive and displayed to the penny. No dollar sign will be included.

输出
The output will be a single number, the average (mean) of the closing
balances for the twelve months. It will be rounded to the nearest penny,
preceded immediately by a dollar sign, and followed by the end-of-line.
There will be no other spaces or characters in the output.

样例输入
100.00
489.12
12454.12
1234.10
823.05
109.20
5.27
1542.25
839.18
83.99
1295.01
1.75

样例输出
1581.42

来源
[张洁烽]原创

上传者
张洁烽

#include "stdio.h"
int main(int argc, char const *argv[])
{
    double sum=0,a;
    int n=12;
   // freopen("input.txt","r",stdin);
    while(n--)
    {
        scanf("%lf",&a);
        sum+=a;
    }
    printf("%.2lf\n",sum/12);
    return 0;
}
   
#include<iostream>//最优程序
#include<iomanip>
using namespace std;

int main()
{
    double sum=0,a;
    for(int i=0;i<12;i++)
    {
        cin>>a;
        sum+=a;
    }
    cout<<fixed<<setprecision(2)<<sum/12.0<<endl;
}        

**74、


小学生算术

光阴限定:2000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
无数小学生在读书加法时,发现“进位”越发简单失误。你的天职是持筹握算四个3位数在相加时索要多少次进位。你编制的次序应该能够接连处理多组数据,直到读到多少个0(那是输入完结标记)。

输入
输入五个正整数m,n.(m,n,都以四个人数)

输出
输出m,n,相加时需求进位多少次。

样例输入
123 456
555 555
123 594
0 0

样例输出
0
3
1

来源
[张洁烽]原创

上传者
张洁烽

#include <stdio.h>
int main()
{
    int m,n,i,j;
    int a[3],b[3];
    while(scanf("%d%d",&m,&n),m!=0||n!=0)
    {
        a[0]=m/100;
        a[1]=(m-100*a[0])/10;
        a[2]=m%10;
        b[0]=n/100;
        b[1]=(n-100*b[0])/10;
        b[2]=n%10;
        j=0;
        for(i=2; i>=0; i--)
        {
            if(a[i]+b[i]>=10)
            {
                j++;
                a[i-1]+=1;//要考虑进位问题
            }
        }
        printf("%d\n",j);
    }
    return 0;
}   
 
 
#include<stdio.h>
int main()
{
    int a,b,c,d,e,f,n,m,i;
    for(;;)
    {
        scanf("%d%d",&n,&m);
        if(n==0&&m==0)
            return 0;
        else
        {
            i=0;
            a=n/100;b=n%100/10;c=n%10;
            d=m/100;e=m%100/10;f=m%10;
            if(c+f>=10)
            {i+=1;b+=1;}
            if(b+e>=10)
            {i+=1;a+=1;}
            if(a+d>=10)
            {i+=1;}
            printf("%d\n",i);
        }
    }
  return 0;
}
              

**75、


日期计算

时光限定:三千ms  |  内部存储器限制:65535 KB

难度:1

描述
如题,输入2个日期,格式如:二〇一〇 10 24 ,判断这一天是这一年中的第几天。

输入
首先行输入3个数N(0<N<=100),表示有N组测试数据。前边的N行输入多组输入数据,每行的输入数据都以几个按标题供给格式输入的日子。

输出
每组输入数据的输出占一行,输出判断出的天数n

样例输入
3
2000 4 5
2001 5 4
2010 10 24

样例输出
96
124
297

来源
[naonao]改编C语言习题

上传者
naonao

#include <iostream>
using namespace std;
int leap(int a)
{
    if(a%4==0&&a%100!=0||a%400==0)
        return 1;
    else return 0;
}
int number(int year,int m,int d)
{
    int sum=0,i,j,k,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    if(leap(year)==1)
        for(i=0;i<m-1;i++)
            sum+=b[i];
    else 
        for(i=0;i<m-1;i++)
            sum+=a[i];
            sum+=d;
        return sum; 
}
int main(int argc, char const *argv[])
{
    int n;
    cin>>n;
    while(n--)
    {
        int year,month,day,n;
        cin>>year>>month>>day;
        n=number(year,month,day);
        cout<<n<<endl;
    }
    return 0;
}   
 
#include<stdio.h>//最优程序
int main()
{
    int a,b=0,c,y,m,d,fib;
    scanf("%d",&a);
    while(a--)
    {
        scanf("%d %d %d",&y,&m,&d);
        if(y%400==0||y%100!=0&&y%4==0)
            fib=29;
        else fib=28;
        for(c=1;c<=m;c++)
        switch(c-1)
        {
           case 1:
           case 3:
           case 5:
           case 7:
           case 8:
           case 10:b+=31;break;
           case 2:b+=fib;break;
           case 4:
           case 6:
           case 9:
           case 11:b+=30;break;
        }
        b+=d;
        printf("%d\n",b);
        b=0;
    }
    return 0;
}        

**77、


开灯难点

时光范围:3000 ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
有 n盏灯,编号为1~n,第①民用把装有灯打开,第③私家按下全体编号为2
的翻番的开关(那一个灯将被关闭),第多少人按下拥有编号为3的倍数的开关(个中关掉的灯将被打开,开着的灯将被关门),依此类推。一共有k个人,问最终有怎么样灯开着?输入:n和k,输出开着的
灯编号。k≤n≤一千

输入
输入一组数据:n和k

输出
出口开着的灯编号

样例输入
7 3

样例输出
1 5 6 7

来源
经典算法

上传者
CEO

#include<stdio.h>
int main( )
{
    int n, k, j, open,i;
    scanf("%d%d", &n, &k );
    for(i = 1 ; i <= n ; i++ )
    {
        open = 1;
        for( j = 2 ; j <= k ; j++ )
        {
            if( i % j == 0 )
                open = (open+1) % 2;
        }
        if( open )
            printf("%d ", i );
    }
    return 0;
}  
 
#include <iostream>//最优程序
using namespace std;
int main()
{
    int n,k,a[1000],i;
    cin>>n>>k;
    for(i=0;i<n;i++)
        a[i]=1;
    for(i=2;i<=k;i++)
        for(int j=0;j<n;j++)
        {
            if((j+1)%i==0)
            if(a[j]==0)a[j]=1;
            else a[j]=0;
        }
        for(i=0;i<n;i++)
            if(a[i]==1)cout<<i+1<<" ";
            cout<<endl;
    return 0;
}              

**94、


cigarettes

时光限定:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
Tom has many cigarettes. We hypothesized that he has n cigarettes and
smokes them

one by one keeping all the butts. Out of k > 1 butts he can roll a
new cigarette.
Now,do you know how many cigarettes can Tom has?

输入
First input is a single line,it’s n and stands for there are n
testdata.then there are n lines ,each line contains two integer numbers
giving the values of n and k.

输出
For each line of input, output one integer number on a separate line
giving the maximum number of cigarettes that Peter can have.

样例输入
3
4 3
10 3
100 5

样例输出
5
14
124

来源
[rooot]原创

上传者
rooot

#include<iostream>
using namespace std;
int main()
{
    int n;cin>>n;
    while(n--)
    {
        int a,b;
        cin>>a>>b;
        int sum=0;
        sum+=a;
        while(a>=b)
        {
            a-=b;//只要a-b还大于b , 就相当于a会多一个
            a++;
            sum++;
        }
        cout<<sum<<endl;
    }
    return 0;
}
   
#include "stdio.h"
#include<fstream>
int main()
{
    //freopen("d:\\1.txt","r",stdin);
    //freopen("d:\\2.txt","w",stdout);
    int m;
    scanf("%d",&m);
    while(m--)
    {
        int n,k,sum;
        scanf("%d%d",&n,&k);
        sum=n;
        while(n/k)                   
        { sum+=n/k;  n=n/k+n%k; }
        printf("%d\n",sum);
    }
    return 0;
}              

**96、


n-1位数

时光限定:2000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
已知w是一个超乎10但不超过一千000的无符号整数,若w是n(n≥2)位的平头,则求出w的后n-一个人的数。

输入
先是行为M,表示测试数据组数。
接下去M行,每行蕴涵一个测试数据。

输出
出口M行,每行为对应行的n-1人数(忽略前缀0)。假使除去最高位外,其他位都为0,则输出0。

样例输入
4
1023
5923
923
1000

样例输出
23
923
23
0

来源
[rooot]原创

上传者
rooot

#include<stdio.h><pre name="code" class="cpp">//较简单的做法    
int main()
{
    int num;
    int M;
    scanf("%d",&num);
    while(num--)
    {
        scanf("%d",&M);
        int i=10;
        while(M/i>=10)
        {
            i=i*10;
        }
        printf( "%d\n" ,M%i);
    }
}  
 
#include<cstdio>//最优程序
int main()
{
    int n,m;
    scanf("%d",&n);
    while(n--)
    {
        scanf("\n%*c%d",&m);
        printf("%d\n",m);
    }
}                

97、

手足郊游难点

时光限定:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
兄弟俩骑车郊游,表弟先出发,每分钟X米,M分钟后,表哥带一条狗出发。以每分钟Y米的进程去追四哥,而狗则以每分钟Z米的速度向三哥跑去,追上哥哥后又立时回去,直到三弟追上三弟时,狗跑了有点米?

输入
先是行输入一个整数N,表示测试数据的组数(N<100)每组测试数据占一行,是四个正整数,分别为M,X,Y,Z(数据保障X<Y<Z)

输出
出口狗跑的门径,结果保留小数点后两位。

样例输入
1
5 10 15 20

样例输出
200.00

来源
经典数学难点

上传者
张云聪

#include "stdio.h"
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        double m,x,y,z,s;
        scanf("%lf%lf%lf%lf",&m,&x,&y,&z);
        s=x*m/(y-x)*z;
        printf("%.2lf\n",s);
    }
    return 0;
}  
 
#include<iostream>//最优程序
#include<stdio.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int s,a,b,c;
        cin>>s>>a>>b>>c;
        printf("%.2lf\n",s*a/(double)(b-a)*c);
    }

}              

**98、


作育转换

岁月范围:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
输入一个百分制的成绩M,将其转换来对应的等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;

输入
第②行是一个平头N,表示测试数据的组数(N<10)
每组测试数据占一行,由三个整数M组成(0<=M<=100)。

输出
对此每组输入数据,输出一行。

样例输入
2
97
80

样例输出
A
B

来源
hdu2004

上传者
张云聪

#include "stdio.h"
int main(int argc, char const *argv[])
{
    int n,a;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&a);
        if(90<=a&&a<=100) printf("A\n");
        if(80<=a&&a<=89) printf("B\n");
        if(70<=a&&a<=79) printf("C\n");
        if(60<=a&&a<=69) printf("D\n");
        if(0<=a&&a<=59) printf("E\n");
    }
    return 0;
}    
 
#include<iostream>//最优程序
using namespace std;
int main()
{
int n,s;
cin>>n;
while(n--)
{
cin>>s;
switch(s/10)
{
case 10:
case 9:cout<<"A"<<endl;break;
case 8:cout<<"B"<<endl;break;
case 7:cout<<"C"<<endl;break;
case 6:cout<<"D"<<endl;break;
default:cout<<"E"<<endl;break;
}
}
}        

**100、


1的个数

日子范围:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
小南刚学了二进制,他想了解一个数的二进制表示中有个别许个1,你能帮她写三个主次来完毕那个任务吗?

输入
先是行输入七个整数N,表示测试数据的组数(1<N<一千)
每组测试数据只有一行,是1个整数M(0=<M<=一千0)

输出
每组测试输出占一行,输出M的二进制表示中1的个数

样例输入
3
4
6
7

样例输出
1
2
3

来源
[张云聪]原创

上传者
张云聪

#include <iostream>
#include <stdio.h>
using namespace std;
int main(int argc, char const *argv[])
{
    int n;
    cin>>n;
    while(n--)
    {
        int a,i,count=0;
        cin>>a;
        while(a)
        {
            if(a%2==1) count++;
            a/=2;
        }
        cout<<count<<endl;
    }
    return 0;
}  
 
#include<stdio.h>//最优程序
main(){int n,m,s;scanf("%d",&n);while(n--){scanf("%d",&m);s=0;while(m)m&=m-1,s++;printf("%d\n",s);}}        

101、

两点离开

岁月限制:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
输入两点坐标(X1,Y1),(X2,Y2)(0<=x1,x2,y1,y2<=一千),总括并出口两点间的距离。

输入
第1行输入四个整数n(0<n<=一千),表示有n组测试数据;
接着每组占一行,由五个实数组成,分别代表x1,y1,x2,y2,数据里面用空格隔断。

输出
对此每组输入数据,输出一行,结果保留两位小数。

样例输入
2
0 0 0 1
0 1 1 0

样例输出
1.00
1.41

来源
[苗栋栋]原创

上传者
苗栋栋

#include<math.h>
#include<stdio.h>
int main()
{
    int n;
    double l,x1,x2,y1,y2;
    // freopen("input.txt","r",stdin);
    scanf("%d",&n);
    while(n--)
    {
    scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
    l=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
    printf("%.2lf\n",l);
    }
    return 0;
} 
 
#include<iostream>//最优程序
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{
    /*freopen("1.txt","r",stdin);
    freopen("2.txt","w",stdout);*/

double x1,x2,y1,y2,m;
double a;
cin>>m;
while(m--)
{
    cin>>x1>>y1>>x2>>y2;
    a=sqrt((double)((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
    cout.setf(ios::fixed); 
    cout<<setprecision(2)<<a<<endl;
}
return 0;
}

**111、


分数加减法

时间限制:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
编写一个C程序,实现三个分数的加减法

输入
输入蕴含多行数据
每行数据是3个字符串,格式是”a/boc/d”。
中间a, b, c, d是3个0-9的整数。o是运算符”+”或然”-“。

数据以EOF结束
输入数据保险合法

输出
对于输入数据的每一行输出四个分数的演算结果。
在意结果应符合书写习惯,没有剩余的记号、分子、分母,并且化简至最简分数

样例输入
1/8+3/8
1/4-1/2
1/3-1/3

样例输出
1/2
-1/4
0

来源
水题比赛

上传者
hzyqazasdf

#include <iostream>
#include<cstdlib>
using namespace std;
int yinshu(int x,int y)
{
    if(x<y)
    {
        int tmp;
        tmp = x;
        x = y;
        y = tmp;
    }
    if(x%y == 0)
        return abs(y);
    else
        return yinshu(y,x%y);
}

int main(void)//最优程序
{
    int a,b,c,d;
    char optr,num;
    while(cin >> a >> num >> b >> optr >> c >> num >> d)
    {
        int x,y;
        switch(optr)
        {
        case '+':
        {
            x = a*d+b*c;
            y = b*d;
            break;
        }
        case '-':
        {
            x = a*d-b*c;
            y = b*d;
            break;
        }
        }
        if(x == 0)
            cout << 0 << endl;
        else if(y/yinshu(x,y) == 1)
            cout << x/yinshu(x,y) << endl;
        else
            cout << x/yinshu(x,y) << "/" << y/yinshu(x,y) << endl;
    }
    return 0;
}     

**113、


字符串替换

日子限制:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
编写制定2个程序达成将字符串中的全数”you”替换到”we”

输入
输入包括多行数据

每行数据是贰个字符串,长度不当先壹仟
数据以EOF结束

输出
对于输入的每一行,输出替换后的字符串

样例输入
you are what you do

样例输出
we are what we do

来源
水题竞赛

上传者
hzyqazasdf

#include "iostream"
#include "cstring"
#include "cstdio"
using namespace std;
int main(int argc, char const *argv[])
{
    char a[1001];

    while(gets(a)!=NULL)
    {
        int i,len=0;
        len=strlen(a);
        for(i=0; i<len; i++)
        {
            if(a[i]=='y'&&a[i+1]=='o'&&a[i+2]=='u')
            {
                cout<<"we";
                i+=2;
            }
            else cout<<a[i];
        }
        cout<<endl;
    }
    return 0;
}
   
#include<algorithm>//最优程序
#include<iostream>
#include<string>

using namespace std;

int main()
{
    string s, s1, s2;
    while(getline(cin,s))
    {
        int flag;
        s1 = "you";
        s2 = "we";
        flag = s.find(s1,0);
        while(flag != string::npos)
        {
            s.replace(flag, 3, s2);
            flag = s.find(s1, flag + 1);
        }
        cout << s << endl;
    }
    return 0;
}    

**122、


Triangular Sums

时限:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
The nth* Triangular number, **T(n) = 1 + …
n, is the sum of the first n integers. It is the number of
points in a triangular array with 
n points on side. For
example 
T*(4)**:

X
X X
X X X
X X X X

Write a program to compute the weighted sum of triangular numbers:

W(n) = SUM[k = 1…n; k * T(k + 1)]

输入
The first line of input contains a single integer N, (1 ≤ N ≤ 1000)
which is the number of datasets that follow.

Each dataset consists of a single line of input containing a single
integer n, (1 ≤ n ≤300), which is the number of points on a side of the
triangle.

输出
For each dataset, output on a single line the dataset number (1 through
N), a blank, the value of n for the dataset, a blank, and the weighted
sum ,W(n), of triangular numbers for n.

样例输入
4
3
4
5
10

样例输出
1 3 45
2 4 105
3 5 210
4 10 2145

来源
Greater New York
2006

上传者
张云聪

#include<iostream>
using namespace std;
int main()
{
    int n,j=1;
    cin>>n;
    while(n--)
    {
        int a,sum=0;
        cin>>a;
        for(int i=1;i<=a;i++)
        sum+=(i*(i+1)*(i+2))/2;

        cout<<j++<<" "<<a<<" "<<sum<<endl;
    }
    return 0;
}
    
 
#include<iostream>//最优程序
using namespace std;
const int M=310;
int W[M];
int main()
{
    
    for(int i=1;i!=M;i++)
        W[i]=W[i-1]+i*(i+1)*(i+2)/2;
    int m,n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>m;
        cout<<i<<" "<<m<<" "<<W[m]<<endl;
    }
}                

**125、


盗梦空间

日子范围:贰仟ms  |  内存限制:65535 KB

难度:2

描述
《盗梦空间》是一部能够的影片,在那部电影里,Cobb等人方可进去梦境之中,梦境里的时刻会比现实中的时间过得快得多,那里倘诺现实中的3分钟,在梦里正是1钟头。

然而,Cobb他们选取强效镇静剂,能够从第3层梦境进入第3层梦境,甚至进入三层,四层梦境,每层梦境都会生出相同的日子加快效果。那么未来给您Cobb在各层梦境中经历的时光,你能算出具体世界过了多久吗?

譬如说,Cobb先在首先层梦境待了三个小时,又在其次层梦境里待了1天,之后,重临第贰层梦境之后立刻回到了切实可行。

那么在实际世界里,其实过了396秒(6.6分钟)

输入
首先行输入一个整数T(0<=T<=100),表示测试数据的组数。
每组测试数据的首先行是3个数字M(3<=M<=100)
随 后的M行每行的发轫是四个字符串,该字符串要是是”IN”
则Cobb向更深层的梦境出发了,倘诺是字符串”OUT”则代表Cobb从深层的梦回到了上一层。借使是首字符串是”STAY”则意味Cobb在该层梦境
中滞留了一段时间,本行随后将是三个整数S表示在该层停留了S分钟(1<=S<=一千0000)。数据保险在切实世界中,时间过了整数
秒。

输出
对此每组测试数据,输出现实世界过的时光(以秒为单位)。

样例输入
1
6
IN
STAY 60
IN
STAY 1440
OUT
OUT

样例输出
396

来源
通讯兴趣小组选拨赛

上传者
admin

#include <iostream>
#include <string>
using namespace std;
int main() {
    int n, m;
    cin >> n;
    while (n--) {
        double jt = 0, min, tt = 1;
        cin >> m;
        while (m--) {
            string s;
            cin >> s;
            if (s == "IN") {
                tt *= 20;
                continue;
            }
            if (s == "OUT") {
                tt /= 20;
                continue;
            }
            cin >> min;
            jt += min / tt;
        }
        cout << jt * 60 << endl;
    }
    return 0;
}
  
#include<iostream>//最优程序
#include<string>
using namespace std;
int main()
{
    int m;
    string s;
    cin>>m;
    while(m--)
    {
        int p=1,n,t=0,tt;
        cin>>n;
        while(n--)
        {
            cin>>s;
            if(s=="STAY")
            {
                cin>>tt;
                t+=tt*60/p;
            }
            else if(s=="IN") p*=20;
            else p/=20;
        }
        cout<<t<<endl;
    }
}        

**168、


房间安顿

时光限定:3000ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
二〇〇八年巴黎世博会(Expo二〇〇八),是第51届世博会。于二〇〇九年四月1十七日至七月十五日以内,在中夏族民共和国北京市举办。此次世界博览会也是由华夏设立的
第四届世博会。东京世界博览会以“城市,让生活更美好”(Better City,Better
Life)为核心,将充裕探索21世纪城市生活。

这一次世界博览会总斥资达450亿人民币,创设了世博会史上的最大范围记录。吸引200个国家和国际公司参加展览。猜想有七千万人次的参观者。


了更好地接待在那中间来自世界外地的参观者,如何合理布署各酒店的住房难点提到了日程。组织委员会委员会已接到了大批量的客户住宿定单,每张定单的情节包罗要下榻的房
间数,开端住宿时间和要住的气数。为了方便整个城市各饭店的管制,组织委员会委员会希望对那个定单实行布局,目标是用尽也许少的房间来知足那一个定单,以便空出愈多的
房间用于安顿流动游客。

组织委员会委员会请求DPAJERO.Kong来成功这几个任务,对这么些定单实行合理安顿,使得满意这个定单需要的房间数最少。

比方:有个别定单上的游客一旦被布署到某房间,在她约定住宿的时期内是不换房间的。为了简化描述,定单上的起来住宿时间为距离今后的第几天。例如,定单为(10,30,5)表示游客要求利用10个房间,第③0天开端连住5天。

输入
首先行:T 代表有T组测试数据
每组测试数据第壹行:N 表示定单数
每组测试数据接受来有N行,每行有四个整数 A B C
表示房间数,开首住宿时间和平运动气
1<=T<=100
1<=N<=10000 1<=A<=10 1<=B<=180 1<=c<=10

输出
输出一个整数,为知足全体定单要求的最少房间数。

样例输入
1
3
3 10 4
4 9 3
3 12 6

样例输出
7

来源
其三届广西省主次设计大赛

上传者
张云聪

#include <iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    while(n--){
        int m,a[200]={0},b,c,d;//计算出每天的最大人数,即房间数,保存
        cin>>m;
        while(m--){
            cin>>b>>c>>d;
            for(int i=c;i<c+d;i++)//是<,第c+d天不住的
                a[i]+=b;
        }
        int max=a[1];
        for(int i=2;i<181;i++)
            if(a[i]>max)
                max=a[i];
        cout<<max<<endl;
    }
    return 0;
}  
 
#include <stdio.h>//最优程序
#include <string.h>
#define MAX 200
int Scan(){
    int res=0 , ch;
    while(!((ch=getchar()) >= '0' && ch <= '9'))
        if(ch==EOF) return EOF;
        res=ch-'0';
        while((ch=getchar()) >= '0' && ch <= '9')
            res = res*10 + (ch-'0');
        return res;
}
int main()
{
    int Ncase,d[MAX];
    scanf("%d",&Ncase);
    while(Ncase--){
        memset(d,0,sizeof(d));
        int max = -1, n, a, b, c;
        n = Scan();
        while(n--){
            a = Scan();    b = Scan();    c = Scan();
            d[b] += a;
            d[b+c] -= a;
        }
        for (int i = 1 ; i < MAX ; i++){
            d[i] = d[i-1] + d[i];
            if (max < d[i]){
                max = d[i];
            }
        }
        printf("%d\n",max);
    }
    return 0;
}        

**169、


素数

日子范围:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
走进世界艺术博览园某音讯通讯馆,参观众将获得前所未有的高等级互动体验,一场充满创想和热情洋溢的音讯通讯互动体验秀将以全新格局展现,从客官踏入展览馆的首先步起,就将与手持终端密不可分,人类未来期望的悲喜从参观众的掌上海展览中心开。


等候区的只求花园中,参观众便开始了他们奇妙的心得之旅,等待中的旅客可采取手提式有线电电话机等极端参预互动小游戏,与希望剧场内的虚拟人物Kr.
Kong 进行猜数竞赛。当荧屏出现一个整数X时,若您能比Kr.
Kong更快的产生最接近它的素数答案,你将会获取三个奇怪的红包。

譬如说:当荧屏出现22时,你的答问应是23;当显示器出现8时,你的回应应是7;若X本身是素数,则答应X;若最接近X的素数有多个时,则回应出乎它的素数。

 

输入
先是行:N 要竞猜的平头个数
接下去有N行,每行有一个正整数X
1<=N<=5 1<=X<=1000

输出
出口有N行,每行是对应X的最接近它的素数

样例输入
4
22
5
18
8

样例输出
23
5
19
7

来源
其三届广东省主次设计大赛

上传者
张云聪

#include<stdio.h>
int main()
{
    int a[1010]= {1,1};
    int i,j;
    for(i=2; i<32; i++)
    {
        if(a[i]==0)
            for(j=i*i; j<1010; j+=i)
                a[j]=1;
    }
    int N;
    scanf("%d",&N);
    while(N--)
    {
        int n;
        scanf("%d",&n);
        for(i=n; a[i]==1; i--);
        for(j=n; a[j]==1; j++);
        if((j-n)<=(n-i))
            printf("%d\n",j);
        else
            printf("%d\n",i);
    }
} 
 
 
#include<iostream>//最优程序
#include<algorithm>
using namespace std;
int prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,
191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,
419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,
653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,
919,929,937,941,947,953,967,971,977,983,991,997,1009};
    int main()
{
    int n,m;
    cin>>n;
    while(n--)
    {
        cin>>m;
        if(m==1) {cout<<2<<endl;continue;}
        int* l=lower_bound(prime,prime+169,m);
        if(*l-m<=m-*(l-1)) cout<<*l<<endl;
        else cout<<*(l-1)<<endl;
    }
}                

**198、


数数

光阴限制:2000ms  |  内部存款和储蓄器限制:65535 KB

难度:2

描述
笔者们一直数数都以欣赏从左向右数的,可是大家的小白同学近来听大人说德意志总人口数和大家略微分歧,他们恰恰和大家相反,是从右向左数的。因而当他来看123时会说“321”。

方今有1个人德意志来的教师在澳门大学展开关于ACM的讲座。未来他聘请你来担任他的帮手,他给您有的素材让您找到那一个素材在书中的页数。今后你早已找到了对应的页码,要用英文把页码告诉她。

为了简化大家的题材,你只要求回到单词的大写的首字母。(数字0读成字母O)

留意:各类数字式单独读取的,因而不会现身11读成double one的情况。

输入
输入分两片段:
首先有个别:1个整数T(1<=T<=一千)
第叁部分:一共T行,每行为五个数字。每一个数的长短不当先13位。

输出
每组输出单独占一行,输出对应的回来给德意志联邦共和国教授的页码缩写。

样例输入
2
12
1234

样例输出
TO
FTTO

来源
卑尔根高校校赛标题

上传者
张云聪

#include<iostream>
#include<string>
using namespace std;
int main ( )
{
    int n;
    cin >> n;
    while ( n-- )
    {
        string s;
        cin>>s;
        for ( int i = s.size()-1; i >=0; i-- )
        {
            switch ( s[i] )
            {
                    case '0':
                    case '1':
                        cout << "O"; break;
                    case '2':
                    case '3':
                        cout << "T"; break;
                    case '4':
                    case '5':
                        cout << "F"; break;
                    case '6':
                    case '7':
                        cout << "S"; break;
                    case '8':
                        cout << "E"; break;
                    case '9':
                        cout << "N"; break;
            }
        }
        cout << endl;
    }
    //system ( "PAUSE" );
    return 0;
}   
 
#include<cstdio>//最优程序
char str[]="OOTTFFSSENT";
void show(int t)
{
    if(t){putchar(*(str+t%10));show(t/10);}
}
int main()
{
    int n,t;
        scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        show(n);puts("");
    }
}                 

**199、


有线网络覆盖

时限:3000ms  |  内存限制:65535 KB

难度:3

描述
笔者们的乐乐同学对于互连网可算得上是看上,他有3个布署,那就是用有线网覆盖乌兰巴托高校。

现在该校给了他二个空子,因而她要购买很多的无线路由。现在他正在配置某条大道的网络,而高校只同意把他的有线路由器放在路的正中间。大家默许那条大路是笔
直的同时它在别的省方的肥瘦都一样。并且存有的路由器的覆盖面积是同一的。今后乐乐总计出那条大路的长和宽,以及路由器的掩盖半径,想请您扶助,帮他盘算
出他至少要买卖的路由器的数据。

只顾:为了避防万一某种干扰,两台有线路由中间的矮小距离无法小于1米图片 4

图第11中学为一条矩形的道路,中间的虚线代表中线。图2为最小覆盖的示意图。

 

输入
输入包涵多组测试数据
先是有的:二个整数T(1<=T<=500)
其次有个别:一共T行,每行李包裹涵八个整数L,D,PRADO代表路的长,宽和覆盖半径(米)。
(1<=L<=100000),(1<=D<=50),(1<=R<=200)。

输出
对于每组测试数据输出各占一行,惟有一个整数,表示最少的路由器数量。如若不能够覆盖,请输出impossible

样例输入
2
40 6 5
40 10 5

样例输出
5
impossible

来源
罗萨里奥大高校赛标题

上传者
张云聪

/*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=199
 * by jtahstu on 2015/2/11 16:00
 */
#include <iostream>
#include <cmath>
using namespace std;
int main() {
    int r, d, l, n;
    cin >> n;
    while (n--) {
        cin >> l >> d >> r;
        if (4 * r * r - d * d < 1) {
            cout << "impossible" << endl;
        } else {
            double a = sqrt((2 * r) * (2 * r) * 1.0 - (d * d));
            if ((int) (l / a) == l / a)
                cout << (int) (l / a) << endl;
            else
                cout << (int) (l / a) + 1 << endl;
        }
    }
    return 0;
} 
 
#include<stdio.h>//最优程序
#include<math.h>
int main(){int T;double L,D,R,a;
scanf("%d",&T);while(T--)
{scanf("%lf%lf%lf",&L,&D,&R);
a=4*R*R-D*D;if(a>0)printf("%.0lf\n",ceil(L/sqrt(a)));
else puts("impossible");}}        

**204、


Coin Test

时刻限定:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
As is known to all,if you throw a coin up and let it droped on the desk
there are usually three results. Yes,just believe what I say ~it can be
the right side or the other side or standing on the desk, If you don’t
believe this,just try In the past there were some famous mathematicians
working on this .They repeat the throwing job once again. But jacmy is a
lazy boy.He is busy with dating or playing games.He have no time to
throw a single coin for 100000 times. Here comes his idea,He just go
bank and exchange thousands of dollars into coins and then throw then on
the desk only once. The only job left for him is to count the number of
coins with three conditions.

He will show you the coins on the desk to you one by one. Please tell
him the possiblility of the coin on the right side as a fractional
number if the possiblity between the result and 0.5 is no larger than
0.003. BE CAREFUL that even 1/2,50/100,33/66 are equal only 1/2 is
accepted ! if the difference between the result and 0.5 is larger than
0.003,Please tell him “Fail”.Or if you see one coin standing on the
desk,just say “Bingo” any way.

输入
Three will be two line as input.
The first line is a number N(1<N<65536)
telling you the number of coins on the desk.
The second line is the result with N litters.The letter are “U”,”D”,or
“S”,”U” means the coin is on the right side. “D” means the coin is on
the other side .”S” means standing on the desk.

输出
If test successeded,just output the possibility of the coin on the right
side.If the test failed please output “Fail”,If there is one or
more”S”,please output “Bingo”

样例输入
6
UUUDDD

样例输出
1/2

来源
卑尔根大学校赛标题

上传者
张云聪

#include<stdio.h>
int divisor( int n, int m )
{
    if( n % m == 0 )
        return m;
    else
        divisor( m, n % m );
}
int main( )
{
    int n, n1 = 0, n2 = 0, m1, m2;
    char ch[65537];
    bool stand = false;
    scanf("%d", &n );
    scanf("%s", ch );
    for( int i = 0 ; i < n ; i++ )
    {
        if( ch[i] == 'U' )
            n1++;
        else if( ch[i] == 'D' )
            n2++;
        else if( ch[i] == 'S' )
            stand = true;
    }
    if( stand )
        printf("Bingo\n");
    else if( (1.0*n1/n) > (0.5+0.003) || (1.0*n1/n) < (0.5-0.003) )
        printf("Fail\n");
    else
        printf("%d/%d\n", n1/divisor( n, n1 ), n/divisor( n, n1 ) );
    return 0;
}
      
#include<cstdio>//最优程序
int u,d;
int gcd(int a,int b)
{
    if(a==0) return b;
    else return gcd(b%a,a);
}
int main()
{
    int n;
    char c;
    scanf("%d",&n);
    getchar();
    for(int i=0;i!=n;i++)
    {
        c=getchar();
        if(c=='S') {puts("Bingo");return 0;}
        if(c == 'U') ++u;
        else ++d;
    }
    int g=gcd(u,u+d);
    if((double)u/(u+d)-0.5>0.003 ||(double)u/(u+d)-0.5<-0.003) puts("Fail");
    else printf("%d/%d",u/g,(u+d)/g);
}        

**206、


矩形的个数

时限:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
在一个3*2的矩形中,能够找到4个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形。

给出A,B,总结能够从中找到多少个矩形。

输入
宗旨有多组输入数据(<一千0),你不能够不处理到EOF停止

输入2个整数A,B(1<=A,B<=1000)

输出
出口找到的矩形数。

样例输入
1 2
3 2

样例输出
3
18

来源
FOJ月赛-2007年3月

上传者
ACM_赵铭浩

#include "stdio.h"
int main(int argc, char const *argv[])
{
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        printf("%.0lf\n",(double)a*(a+1)*b*(b+1)/4);
    }
    return 0;
}   
 
#include <stdio.h>//最优程序
main(){float a,b;while(scanf("%f%f",&a,&b)+1)printf("%.0f\n",(a+1)*a*(b+1)*b/4);}        

**216、


A problem is easy

日子范围:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:3

描述
When
Teddy was a child , he was always thinking about some simple math
problems ,such as “What it’s 1 cup of water plus 1 pile of dough ..” ,
“100 yuan buy 100 pig” .etc..

图片 5

One day Teddy met a old man in his dream , in that dream the man whose
name was“RuLai” gave Teddy a problem :

Given an N , can you calculate how many ways to write N as i * j + i +
j (0 < i <= j) ?

Teddy found the answer when N was less than 10…but if N get bigger , he
found it was too difficult for him to solve.
Well , you clever ACMers ,could you help little Teddy to solve this
problem and let him have a good dream ?

输入
The first line contain a T(T <= 2000) . followed by T lines ,each
line contain an integer N (0<=N <= 10^11).

输出
For each case, output the number of ways in one line

样例输入
2
1
3

样例输出
0
1

上传者
苗栋栋

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int a,count=0;
        cin>>a;
        for(int i=1; (i+1)*(i+1)<=(a+1); i++)

            if((a+1)%(i+1)==0)
                count++;

        cout<<count<<endl;
    }
    return 0;
}
 
#include<cstring>
#include<cstdio>
#include<map>
#include<string>
#include<algorithm>
#include<vector>
#include<iostream>
#include<cmath>
using namespace std;
#define CLR(arr,val) memset(arr,val,sizeof(arr))

int main()
{
    int t,n,cnt=0;
    //long long num;
    int num;
    scanf("%d",&t);
    while(t--)
    {
    //    scanf("%lld",&num);
        scanf("%d",&num);
        int nn=(int)(sqrt(num+1.0)+0.5);
        num++;
        cnt=0;
        for(int i=2;i<=nn;i++)
            if(num%i==0) cnt++;
        printf("%d\n",cnt);
    }
    
}    

**217、


a letter and a number

时光限定:3000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
we
define f(A) = 1, f(a) = -1, f(B) = 2, f(b) = -2, … f(Z) = 26, f(z) =
-26;
Give you a letter x and a number y , you should output the result of
y+f(x).

输入
On the first line, contains a number T(0<T<=10000).then T lines
follow, each line is a case.each case contains a letter x and a number
y(0<=y<1000).

输出
for each case, you should the result of y+f(x) on a line

样例输入
6
R 1
P 2
G 3
r 1
p 2
g 3

样例输出
19
18
10
-17
-14
-4

上传者
苗栋栋

#include "stdio.h"
int main(int argc, char const *argv[])
{
    int n;
    //freopen("input.txt","r",stdin);
    scanf("%d",&n);
    while(n--)
    {
        char a;
        int b,c,d;
        char ch=getchar();
        scanf("%c%d",&a,&b);
        c=a;
        if(a>='A'&&a<='Z')
        d=c-64;
        if(a>='a'&&a<='z')
        d=96-c;
        printf("%d\n",b+d);
    }
    return 0;
}     
 
#include<stdio.h>//最优程序
main()
{
    int x,n;
    scanf("%d",&x);
    while(x--)
    {
        getchar();
        char c;
        scanf("%c %d",&c,&n);
        if(c>=65&&c<=90) c=c-64;
        else c=0-(c-96);
        n=c+n;
        printf("%d\n",n);
        

    }
}           

**241、


字母总括

岁月范围:3000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
今日给您一个由小写字母组成字符串,要你找出字符串中出现次数最多的假名,倘诺出现次数最多字母有几个那么输出最小的尤其。

输入
先是行输入3个正整数T(0<T<25)
随即T行输入三个字符串s,s长度小于1010。

输出
每组数据输出占一行,输出现身次数最多的字符;

样例输入
3
abcd
bbaa
jsdhfjkshdfjksahdfjkhsajkf

样例输出
a
a
j

来源
[路过这]原创

上传者
路过这

#include <stdio.h>
#include "string.h"
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
    int n,i,len;
    char a[1011];
    cin>>n;
    getchar();
    while(n--)
    {
        char b[1011]={0};
        int fla=0,max=0;
        cin>>a;
        len=strlen(a);
        for(i=0; i<len; i++)
        {

            b[a[i]-'a']++;
        }
        max=b[0];
        for(i=0; i<26; i++)
        {
            if(b[i]>max)//||(b[i]==max&&a[i]-'a'<a[fla]-'a')
            {
                max=b[i];
                fla=i;
            }
        }
        cout<<(char)(fla+'a')<<endl;
    }
    return 0;
}
   
#include<stdio.h>//最优程序
#include<string.h>
main()
{
    int x,i,max,q;
    char a[1011];
    scanf("%d",&x);
    getchar();
    while(x--)
    {
        int s[26]={0};
        gets(a);
        for(i=strlen(a)-1;i>=0;i--)
            s[a[i]-97]++;
        max=0;
        for(i=0;i<26;i++)
            if(max<s[i]) max=s[i],q=i;
        printf("%c\n",q+97);
    }
    
}              

**242、


测算球体量

时光限定:3000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
基于输入的半径值,总括球的体量。

输入
输入数据有多组,每组占一行,每行蕴涵1个实数,表示球的半径。(0<XC60<100)

输出
出口对应的球的体积,对于每组输入数据,输出一行,总计结果四舍五入为整数
Hint:PI=3.1415926

样例输入
1
1.5

样例输出
4
14

来源
Trinity

上传者
张洁烽

#include<stdio.h>
int main()
{
    double n,pi=3.1415926;
    while(scanf("%lf",&n)==1)
    {
        printf("%.0lf\n",4*pi*n*n*n/3);
    }
    return 0;
}

**243、


沟通输出

时限:2000ms  |  内存限制:65535 KB

难度:1

描述
输入n(n<100)个数,找出在那之中相当小的数,将它与最前方的数交流后输出这个数。(若是那么些第二个数正是极小的数,则维持原样输出,如若最小的数有同样的依照前边的交流)

输入
输入数据有多组,每组占一行,每行的上马是3个整数n,表示这么些测试实例的数值的个数,跟着就是n个整数。n=0表示输入的了断,不做处理。

输出
对此每组输入数据,输出沟通后的数列,每组输出占一行。

样例输入
4 2 1 3 4
5 5 4 3 2 1
0

样例输出
1 2 3 4
1 4 3 2 5

来源
[张洁烽]原创

上传者
张洁烽

#include<stdio.h>
#include<iostream>
using namespace std;
int main() {
    int n, i, a[100], t, j;
    while (cin >> n && n) {
        j = 0;
        for (i = 0; i < n; i++)
            cin >> a[i];
        t = a[0];
        for (i = 0; i < n; i++) {
            if (a[0] > a[i]) {
                a[0] = a[i];
                j = i;
            }
        }
        a[j] = t;
        for (i = 0; i < n; i++)
            printf("%d ", a[i]);
        printf("\n");
    }
    return 0;
}
 
 
#include<iostream>//最优程序
#include<iterator>
#include<algorithm>
using namespace std;
int data[110];
int main()
{
int n;
    while(cin>>n && n)
    {
        for(int i=0;i!=n;i++) cin>>data[i];
        iter_swap(data,min_element(data,data+n));
        copy(data,data+n,ostream_iterator<int>(cout," "));
        cout<<endl;
    }
}                        

**244、


16进制的简约运算

光阴限制:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
近期给您三个16进制的加减法的表明式,须要用8进制输出表明式的结果。

输入
率先行输入四个正整数T(0<T<一千00)
接下去有T行,每行输入一个字符串s(长度小于15)字符串中有七个数和四个加号可能二个减号,且表明式合法并且存有运算的数都自愧不如三十几个人

输出
每一种表明式输出占一行,输出表明式8进制的结果。

样例输入
3
29+4823
18be+6784
4ae1-3d6c

样例输出
44114
100102
6565

来源
[路过这]原创

上传者
路过这

#include"stdio.h"
int main() {
    int n, a, b;
    while (scanf("%d", &n) != EOF) {
        while (n--) {
            scanf("%x %x", &a, &b);
            printf("%o\n", a + b);
        }
    }
    return 0;
}
 
#include<stdio.h>//最优程序
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int a,b,d;
        char c;
        scanf("%x%c%x",&a,&c,&b);
        if(c=='+') d=a+b;
        else d=a-b;
        if(d>=0)
            printf("%o\n",d);
        else printf("-%o\n",-d);
    }
}       

**255、


C小加 之 随机数

岁月范围:两千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
ACM
队的“C小加”同学想在该校中请部分校友合伙做一项问卷调查,为了试验的客观性,他先用计算机生成了N个1到一千以内的私自整数
(0<N≤100),对于内部重复的数字,只保留3个,把别的一律的数去掉,分歧的数对应着分化的上学的儿童的学号。然后再把那几个数从小到大排序,遵照排好的相继去找同学做调查。请你帮助 C小加 落成“去重”与“排序”的工作。

输入
第贰行输入整数T(1<T<10)表示有点组测试数据,
每组测试数据包罗2行,
第一行为三个正整数,表示所生成的即兴数的个数:N(0<N≤100)
第③行有N个用空格隔开分离的正整数,为所发出的随机数。
(随机数为难题给定的,不必要ACMer生成)

输出
输出也是2行,第叁作为1个正整数M,表示区别的妄动数的个数。
第二表现M个用空格隔断的正整数,为从小到大排好序的不同的随机数。

样例输入
1
10
20 40 32 67 40 20 89 300 400 15

样例输出
8
15 20 32 40 67 89 300 400

来源
RQNOJ

上传者
唐博

#include<iostream>
#include<algorithm>
using namespace std;
int main(int argc, char const *argv[])
{
    int n;
    cin>>n;
    while(n--)
    {
        int m,i,a[110],count;
        count=0;
        cin>>m;
        for(i=0; i<m; i++)
            cin>>a[i];
        sort(a,a+m);
        for(i=0; i<m; i++)
        {
            if(a[i]!=a[i+1]) count++;
            else if(a[i]==a[i+1]) a[i]=-1;
        }
        cout<<count<<endl;
        for(i=0; i<m; i++)
        {
            if(a[i]!=-1) cout<<a[i]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
  
#include<iostream>//最优程序
#include<map>
#include<cstdio>
#include<algorithm>
#include<iterator>
using namespace std;
const int maxn=110;
int tab[maxn];
int main()
{
     
    int t;cin>>t;
    while(t--){
        int n;cin>>n;
        for(int i=0;i<n;i++)scanf("%d",&tab[i]);
        sort(tab,tab+n);
        cout<<(n=distance(tab,unique(tab,tab+n)))<<endl;
        copy(tab,tab+n,ostream_iterator<int>(cout," "));cout<<endl;
    }
    
}              

**259、


葱郁的率先课

时限:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:0

描述
葱郁今年曾经六年级了,阿爸给他报了1个上学程序设计的班。

首先节课上,老师讲的正是何等输入三个数,再原样输出出来。

以明日的你看来,挺不难的是不?
那么,就请你也写出1个同一的主次吗

输入
首先行是三个整数N(N<10)表示测试数据的组数)
接下去的n行 每行只有三个数(可能是小数,也或许是整数)
本条数的位数(整数位数+小数位数)不超越17位

输出
外貌输出每一个数,每输出占一行

样例输入
2
3.5
5

样例输出
3.5
5

来源
二〇一〇年小学生程序设计友赛试题

上传者
ACM_赵铭浩

#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    char a[20];
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",a);
        printf("%s\n",a);
    }
    return 0;
}        

**260、


数数小木块

岁月范围:三千 ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
在墙角堆放着一堆完全相同的正方体小木块,如下图所示:

图片 6

 

 因为木块堆得实在是太有规律了,你假诺知道它的层数就足以估测计算有所木块的数据了。

当今请您写个程序 给你任一堆木块的层数,求出那堆木块的数量.

输入
率先行是三个整数N(N<=10)表示测试数据的组数)
接下去的n行 每行唯有贰个平头 ,表示那堆小木块的层数,

输出
对应每一个输入的层数有3个出口,表示这堆小木块的总数量,各个输出占一行

样例输入
215

样例输出
135

来源
二零零六年小学生程序设计友谊赛试题

上传者
ACM_赵铭浩

#include "iostream"
using namespace std;
int main()
{
    int n,i,a,b[10001],sum;
    cin>>n;
     b[0]=0;
     for(i=1;i<=10001;i++)
        {b[i]=b[i-1]+i;}
    while(n--)
    {
        sum=0;
        cin>>a;
            for(i=1;i<=a;i++)
              {sum+=b[i];}
        cout<<sum<<endl;
    }
    return 0;
}  
 
#include <stdio.h>//最优程序
int main()
{
    int n,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%d\n",n*(n+1)*(n+2)/6);
    }
}        

**263、


精 挑 细 选

时刻限定:三千 ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
小王是公司的仓管员,一天,他接受了那般二个职务:从仓库中找出一根钢管。这听起来不算什么,不过这根钢管的渴求可正是让她进退为难了,供给如下:
壹 、 那根钢管一定假诺仓库中最长的;
二 、 那根钢管一定假使最长的钢管中最细的;
叁 、那根钢管一定假诺适合前两条的钢管中编码最大的(每根钢管都有贰个不完全一样的编码,越大表示生产日期越近)。
有关的素材到是有,然而,手工业从几百份钢管材料中选出符合须要的那根……
要不然,依然请你编写个程序来帮她消除那一个难题啊。

输入
第叁行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的率先行
有3个整数m(m<=一千),表示仓库中全部钢管的数码,
然后m行,每行三个整数,分别代表一根钢管的长短(以分米为单位)、直径(以分米为单位)和编码(一个十二位整数)。

输出
对应每组测试数据的输出唯有贰个十人整数,表示选出的那根钢管的编码,
各种输出占一行

样例输入
222000 30 1234567892000 20 98765432143000 50 8721984423000 45 7524981242000 60 7651287423000 45 652278122

样例输出
987654321752498124

来源
2010年小学生程序设计友赛试题

上传者
ACM_赵铭浩

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int m,a,b,c,a1,b1,c1;
        scanf("%d",&m);
        scanf("%d%d%d",&a,&b,&c);
        for(int i=1; i<m; i++)
        {
            scanf("%d%d%d",&a1,&b1,&c1);
            if(a1>a||(a1==a&&b1<b)||(a1==a&&b1==b&&c1>c))
                a=a1,b=b1,c=c1;
        }
        printf("%d\n",c);
    }
    return 0;
}      
 
#include<stdio.h>//最优程序
int main()
{
    int n,m,i,a,b,c,x,y,z;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        a=0;b=0;c=0;
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&x,&y,&z);
            if(x>a||x==a&&y<b||x==a&&y==b&&z>c) { a=x;b=y;c=z; }
        }
        printf("%d\n",c);
    }
    return 0;
}        

**264、


国君的魔镜

日子范围:三千 ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
天皇有叁个魔镜,可以把别的触及镜面包车型大巴东西变为原来的两倍——只是,因为是眼镜嘛,扩充的那部分是反的。

比如一条项链,大家用AB来表示,差异的假名代表分裂颜色的珍珠。假设把B端接触镜面包车型地铁话,魔镜会把这条项链变为ABBA。即便再用一端接触的话,则会成为ABBAABBA(假定国王只用项链的某一端接触魔镜)。

加以最后的项链,请编写程序输出天子没动用魔镜以前,最初的项链大概的矮小长度。

输入
率先行是3个整数N(N<=10)表示测试数据的组数)
每组测试数据占一行
唯有3个字符串(长度小于100),由大写英文字母组成,表示最终的项链。

输出
每组测试数据的输出唯有一个整数,表示国君没动用魔镜前,最初的项链可能的微小长度。

样例输入
2ABBAABBAA

样例输出
21

来源
二零零六年小学生程序设计友赛试题

上传者
ACM_赵铭浩

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
    int temp,k,i;
    char s[100];
    scanf("%d",&temp);
    getchar();
    while(temp--)
    {
        gets(s);
        k=strlen(s);
        while(k)
        {
            for(i=0; i<k; ++i)
                if(s[i]!=s[k-1-i]||k==1||k%2)
                {
                    cout<<k<<endl;
                    k=0;
                }
            k=k/2;
        }
    }
}
   
#include<stdio.h>//最优程序
#include<string.h>
main()
{
    int z,x,q,i;
    char a[101],t[51];
    scanf("%d",&z);
    getchar();
    while(z--)
    {
        gets(a);
        do
        {
            x=strlen(a);
            if(x%2) break;
            for(i=0;i<x/2;i++)
                t[i]=a[x-1-i];
            t[i]='\0';
            a[x/2]='\0';
            q=strcmp(a,t);
        }while(q==0);
        printf("%d\n",x);
    }
}        

**266、


字符串逆序输出

时限:三千ms  |  内部存款和储蓄器限制:65535 KB

难度:0

描述
给定一行字符,逆序输出此行(空格.数字不出口)

输入
先是行是1个整数N(N<10)表示测试数据的组数)
每组测试数据占一行,每行数据中间有且只有三个空格(那样你能够把此行当成五个字符串读取)。
每行字符长度不超越40
而且保险输入的字符唯有空格(二个),数字,小写字母二种

输出
对应每行测试数据,逆序输出(空格和数字不出口)

样例输入
3
abc 123de
abc 123
abc d

样例输出
edcba
cba
dcba

来源
[521521]原创

上传者
ACM_赵铭浩

#include <stdio.h>
#include <string.h>
int main(void)
{
    int n,k,i;
    char a[100];
    //freopen("input.txt", "r", stdin);
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        gets(a);
        k=strlen(a);
        for(i=k-1; i>=0; i--)
            if(a[i]>='a'&&a[i]<='z')
                printf("%c",a[i]);
        printf("\n");
    }
    return 0;
}
     
#include <stdio.h>
void revers()
{
    char c;
    if((c = getchar()) != '\n')
        revers();
    if(c != '\n'&&c>='a'&&c<='z')
        putchar(c);
}

int main()
{
    int a;
    scanf("%d\n",&a);
    while(a--)
    {
        revers();
        printf("\n");
    }
    return 0;
}            

**268、


荷兰国旗难题

时刻限定:三千 ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
 

荷兰王国国旗有三横条块组成,自上到下的三条块颜色依次为红、白、蓝。现有若干由红、白、蓝二种颜色的章节系列,要将它们重新排列使拥有同一颜色的章节在一起。本难点供给将兼具深黄的条块放最左侧、全数浅紫的条块放中间、全部卡其灰的条块放最右侧。

输入
第叁行是三个正整数n(n<100),表示有n组测试数据。接下来有n行,每行有好七个由Haval,W,B两种字符构成的字符串系列,个中Rubicon,W和B分别代表红、白、蓝二种颜色的章节,每行最多有一千个字符。

输出
对输入中每行上由Odyssey,W,B三种字符构成的字符串种类,将它们重新排列使全体同一颜色的章节在一齐,满意前述须要。

样例输入
3BBRRWBWRRRRRRWWRWRBRBRW

样例输出
RRRRRWWBBBRRRRRWWWBRRWB

来源
acm教材

上传者
李文鑫

#include "iostream"
#include "cstdio"
#include "cstring"
using namespace std;
int main(int argc, char const *argv[])
{
    int n,i;
    char a[1001];
    cin>>n;
    getchar();
    while(n--)
    {
        int x=0,y=0,z=0,m=0;
        //把getchar();放这里了,我去
        gets(a);
        m=strlen(a);
        for(i=0;i<m;i++)
        {
            if(a[i]=='R')x++;
            if(a[i]=='W')y++;
            if(a[i]=='B')z++;
        }
        for (i=0;i<x;i++)
        cout<<'R';
        for(i=0;i<y;i++)
            cout<<'W';
        for(i=0;i<z;i++)
            cout<<'B';
        cout<<endl;
    }
    return 0;
}
   
#include<stdio.h>//最优程序
int main()
{
    int n;
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        int w=0,b=0;
        char c;
        while((c=getchar())!=10)
            c=='R'?printf("R"):(c=='W'?w++:b++);
        while(w--)
            putchar('W');
        while(b--)
            putchar('B');
        printf("\n");
    }
}            

**273、


字母小游戏

光阴限制:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:0

描述
给你一个乱序的字符串,里面富含有小写字母(a–z)以及一些特殊符号,请您找出所给字符串里面有着的小写字母的个数,
拿那一个数对26取余,输出取余后的数字在子母表中对应的小写字母(0对应z,1对应a,2对应b….25对应y)。

输入
首先行是三个整数n(1<n<一千)表示接下去有n行的字符串m(1<m<200)必要输入

输出
出口对应的小写字母 每种小写字母单独占一行

样例输入
2
asdasl+%$^&ksdhkjhjksd
adklf&(%^(alkha

样例输出
q
j

来源
[zinber]原创

上传者
zinber

#include "stdio.h"
#include "string.h"
int main(int argc, char const *argv[])
{
    int n;
    char a;
    //freopen("input.txt","r",stdin);
    scanf("%d",&n);
    getchar();
    while(n--)
    {
       int number=0;  
       while(scanf("%c",&a),a!='\n')
        {
            if (a>='a'&&a<='z')
                number++;
        }
        if (number%26==0)
            printf("z\n");
        else
            printf("%c\n",'a'+number%26-1);
    }
    return 0;
}  
 
#include <cstdio>//最优程序
#include <cctype>
#include <cstring>
int main(){
    int n,i;
    char arr[201];
    scanf("%d",&n);
    while(n--){
        scanf("%s",arr);
        int l=strlen(arr),r=0;
        for(int i=0;i!=l;i++)
            if(islower(arr[i]))
                r++;
        r%=26;
        printf("%c\n",r==0?'z':96+r);
    }
}            

**274、


正三角形的外接圆面积

时光限定:1000ms  |  内存限制:65535 KB

难度:0

描述
给您正三角形的边长,pi=3.1415926 ,求正三角形的外接圆面积。

输入
唯有一组测试数据
第1行输入二个整数n(1<n<一千)表示接下去要输入n个边长m(1.0<=m<1000.0)

输出
出口各类正三角形的外接圆面积,保留两位小数,各种面积单独占一行。

样例输入
5
1
13
22
62
155

样例输出
1.05
176.98
506.84
4025.43
25158.92

来源
[zinber]原创

上传者
zinber

#include<stdio.h>
#define pi 3.1415926
int main()
{
    double a,s=0;
    int n;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%lf",&a);
        s=a*a*pi/3;
        printf("%.2lf\n",s);
    }
    return 0;
}
   
#include<stdio.h>//最优程序
int main()
{
   int n;
   double m,pi=3.1415926;
   scanf("%d",&n);
   while(n--)
   {
   scanf("%lf",&m);
   printf("%.2lf\n",pi*m*m/3);
    }
return 0;
}        

**275、


队花的抑郁一

日子范围:3000ms  |  内存限制:65535 KB

难度:1

描述
ACM队的队花C小+平日抱怨:“C语言中的格式输出中有十陆 、⑩ 、八进制输出,但是却尚无二进制输出,哎,真遗憾!何人能帮小编写四个程序达成输入八个十进制数n,输出它的二进制数呀?”

莫非你不想帮帮他啊?^_^

输入
输入有四个数据,数据以EOF停止;每一个数据ni(0<=ni<=一千0一千0)用空格隔绝;
(温馨提醒:EOF就是贰个文书的收尾标志;while(scanf(“%d”,&n)!=EOF){})

输出
输出有多行,每行对应多少个十进制数ni的二进制数;
在意:输出的二进制去掉任何八个结余的0;

样例输入
0 1 2 10

样例输出
0
1
10
1010

来源
原创

上传者
Never

#include "iostream"//十进制转换成二进制
using namespace std;
void dec_bin(const int x)
{
    if (x/2>0)
    {
        dec_bin(x/2);
        cout<<x%2;
    }
    else cout<<x;
}
int main(int argc, char const *argv[])
{
    int data=0;
    while(cin>>data)
    {
        dec_bin(data);
        cout<<endl;
    }
    return 0;
}

**276、


正如字母大小

时光范围:三千ms  |  内存限制:65535 KB

难度:1

描述
自由给出七个英文字母,相比较它们的轻重缓急,规定22个英文字母A,B,C…..Z依次从大到小。

输入
第2行输入T,表示有T组数据;
接下去有T行,每行有八个假名,以空格隔离;

输出
输出各组数据的比较结实,输出格式见样例输出;
(注意输出严谨根据输入的各种即输入是A B,输出时务必是A?B)

样例输入
3
A B
D D
Z C

样例输出
A>B
D=D
Z

来源
原创

上传者
Never

#include<stdio.h>
int main() {
    int i;
    char a, b;
    scanf("%d", &i);
    while (i--) {
        getchar();
        scanf("%c %c", &a, &b);
        if (a > b)
            printf("%c<%c\n", a, b);
        else if (a == b)
            printf("%c=%c\n", a, b);
        else if (a < b)
            printf("%c>%c\n", a, b);
    }
    return 0;
}

**277、


车牌号

时限:两千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
郁郁葱葱很喜爱钻研车牌号码,从车牌号码上得以看到号码登记的必定,据商讨发现,车牌号码是按字典序发放的,未来她收集了过多车牌号码,请你设计程序帮他咬定注册较早的数码。车牌号码由两个假名或数字组成

输入
第贰行是n,代表有n组数据,第三行是m,以下m行是m个车牌号码
其中n<100,m<1000

输出
输出注册较早的车牌号

样例输入
1
4
AA100
aa100
0o2r4
ye2er

样例输出
0o2r4

来源
[侯飒飒]原创

上传者
侯飒飒

#include "iostream"
#include "string.h"
#include "cstdio"
using namespace std;
int main(int argc, char const *argv[])
{
    int n;
    cin>>n;
    while(n--)
    {
        int m,i;
        char a[6]="zzzzz",str[6];
        cin>>m;
        getchar();
        for(i=0; i<m; i++)
        {
            scanf("%s",str);
            if(strcmp(a,str)>0)
                strcpy(a,str);
        }
        printf("%s\n",a);
    }
    return 0;
} 
 
#include<stdio.h>//最优程序
#include<string.h>
main(){int n;scanf("%d",&n);while(n--)
{int m;char a[6],c[6];scanf("%d",&m);getchar();gets(c);
while(--m){gets(a);if(strcmp(a,c)<0)strcpy(c,a);}puts(c);}}        

**283、


对称排序

时间限制:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
In your job at Albatross Circus Management (yes, it’s run by a bunch of
clowns), you have just finished writing a program whose output is a list
of names in nondescending order by length (so that each name is at least
as long as the one preceding it). However, your boss does not like the
way the output looks, and instead wants the output to appear more
symmetric, with the shorter strings at the top and bottom and the longer
strings in the middle. His rule is that each pair of names belongs on
opposite ends of the list, and the first name in the pair is always in
the top part of the list. In the first example set below, Bo and Pat are
the first pair, Jean and Kevin the second pair, etc.

输入
The input consists of one or more sets of strings, followed by a final
line containing only the value 0. Each set starts with a line containing
an integer, n, which is the number of strings in the set, followed by n
strings, one per line, NOT SORTED. None of the strings contain spaces.
There is at least one and no more than 15 strings per set. Each string
is at most 25 characters long.

输出
For each input set print “SET n” on a line, where n starts at 1,
followed by the output set as shown in the sample output.
If length of two strings is equal,arrange them as the original
order.(HINT: StableSort recommanded)

样例输入
7
Bo
Pat
Jean
Kevin
Claude
William
Marybeth
6
Jim
Ben
Zoe
Joey
Frederick
Annabelle
5
John
Bill
Fran
Stan
Cece
0

样例输出
SET 1
Bo
Jean
Claude
Marybeth
William
Kevin
Pat
SET 2
Jim
Zoe
Frederick
Annabelle
Joey
Ben
SET 3
John
Fran
Cece
Stan
Bill

来源
POJ

上传者
sadsad

#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(string a, string b) {
 return a.size() < b.size();
 }
int main()
{
    int n;
    int count=0;
    string a[10001];
    while(cin>>n)
    {
        if(n==0)break;

            for(int i=0;i<n;i++)
            {
                cin>>a[i];
            }
            sort(a,a+n,cmp);//sort
            cout<<"SET "<<++count<<endl;
        for(int i=0;i<n;i+=2)
            cout<<a[i]<<endl;
        if(n%2==0)
        {
            for(int i=n-1;i>0;i-=2)
                cout<<a[i]<<endl;
        }
        else for(int i=n-2;i>0;i-=2)
            cout<<a[i]<<endl;
    }

    return 0;
}
  
#include<stdio.h>//最优程序
#include<string.h>
main()
{
    int x,i,j,q=0;
    char s[16][26],t[26],z[16][26];
    while(1)
    {
        scanf("%d",&x);
        if(x==0) break;
        q++;
        getchar();
        for(i=0;i<x;i++)
            gets(s[i]);
        for(i=1;i<x;i++)
            for(j=0;j<x-i;j++)
                if(strlen(s[j])>strlen(s[j+1])) 
                {strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}
        for(i=0,j=0;i<x;i++,j++)
        {    strcpy(z[j],s[i]);
            if(i!=x-1) strcpy(z[x-j-1],s[++i]);
        }
        printf("SET %d\n",q);
        for(i=0;i<x;i++)
            puts(z[i]);
    }
}        

**324、


猴子吃桃难点

时间限定:3000ms  |  内存限制:65535 KB

难度:0

描述
有一堆桃子不知数目,猴子第壹天吃掉1/2,又多吃了2个,第③天照此措施,吃掉多余桃子的四分之二又多2个,每一天这样,到第m天清晨,猴子发现只剩多只桃子了,问那堆桃子原来有微微个?
(m<29)

输入
先是行有2个平头n,表示有n组测试数据(从第壹行伊始,每一行的多寡为:第m天);

输出
每一行数据是桃子的总个数

样例输入
2
3
11

样例输出
22
6142

来源
网络

上传者
CEO

#include "stdio.h"
int f(int m)
{
    if(m==0) return 1;
    else return 2*(f(m-1)+1);
}
int main()
{
    int n,m;
    //freopen("input.txt","r",stdin);
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        printf("%d\n",f(m));
    }
    return 0;
}
  
#include<stdio.h>//最优程序
int main()
{
    int n,m;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        printf("%d\n",(3<<m)-2);
    }
    return 0;
}        

**399、


整除个数

时刻限定:两千ms  |  内存限制:65535 KB

难度:1

描述
壹 、② 、3… …n那n(0<n<=一千000000)个数中有微微个数能够被正整数b整除。

输入
输入包罗多组数据
每组数据占一行,每行给出多个正整数n、b。

输出
出口每组数据对应的结果。

样例输入
2 1
5 3
10 4

样例输出
2
1
2

来源
自编

上传者
mix_math

#include<stdio.h>
int main()
{
int n,b;
while(scanf("%d%d",&n,&b)!=EOF)
{
int count;
count=n/b;
printf("%d\n",count);
}
return 0;
}  
 
#include <iostream>//最优程序
using namespace std;
int main()
{
    int n,r;
    while(cin>>n>>r)
    cout<<n/r<<endl;
}        

**455、


茶青帽子

日子范围:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
       
近期意识了叁个搞笑的游玩,可是当下还没玩过。贰个舞会上,每一种人头上都戴着一顶帽子,帽子唯有黑白二种,黑的起码有一顶。每种人都能收看人家帽子的颜
色,可是看不见自身的。主持人先让大家看看人家头上戴的是怎么着罪名,然后关灯,若是有人以为自身戴的的草地绿帽子,就打自个儿二个耳光(图片 7,都很自觉,而且无法打别人的哦),开灯,关灯,开灯……。因为都不想打自个儿耳光,所以不明确的景色下都不会打本人的,今后有n顶深湖蓝帽子,第三遍关灯才会听到有人打本身耳光?

输入
首先行唯有三个整数m(m<=一千00),表示测试数据组数。
接下去的m行,每行有八个整数n(n<=一千00000),表示粉色帽子的顶数。

输出
出口第五回关灯能听见耳光声,每组输出占一行。

样例输入
1
2

样例输出
2

来源
原创

上传者
ACM_杨延玺

#include<stdio.h>
int main()
{
    int k;
    scanf("%d",&k);
    while(k--)
    {
        int n;
        scanf("%d",&n);
        printf("%d\n",n);
    }
    return 0;
}
  
#include<cstdio>//最优程序
main(){char _[15];gets(_);while(gets(_))puts(_);}        

**457、


高低写沟通

时刻限定:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:0

描述
     
今后提交了1个只包括大小写字母的字符串,不含空格和换行,须要把里面包车型大巴大写换来小写,小写换来大写,然后输出沟通后的字符串。

输入
第贰行唯有三个整数m(m<=10),表示测试数据组数。
接下去的m行,每行有二个字符串(长度不超过100)。

输出
出口沟通后的字符串,每组输出占一行。

样例输入
2
Acm
ACCEPTED

样例输出
aCM
accepted

来源
原创

上传者
ACM_杨延玺

#include<stdio.h>
#include<string.h>
int main() {
    int n, i, len;
    char a[100];
    scanf("%d", &n);
    while (n--) {
        scanf("%s", a);
        len = strlen(a);
        for (i = 0; i < len; i++) {
            if (a[i] <= 'z' && a[i] >= 'a')
                a[i] = a[i] - 32;
            else
                a[i] = a[i] + 32;
        }
        printf("%s\n", a);
    }
    return 0;
}
 
#include<stdio.h>//最优程序
int main()
{
    int a,b,c,n;
    char x;
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        while(scanf("%c",&x)&&x!='\n')
        {
            if(x>=97&&x<=122) printf("%c",x-32);
            else if(x<=90&&x>=64) printf("%c",x+32);
        }
        printf("\n");
    }
}        

**458、


小光棍数

光阴限制:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
近年Topcoder的XD遇到了三个难题,若是三个数的三回方的后四个人是111,他把如此的数称为小光棍数。他早就清楚了第二个小光棍数是471,471的一次方是104487111,以后她想驾驭第m(m<=一千0000000)个小光棍数是不怎么?

输入
有多组测试数据。第贰行二个整数n,表示有n组测试数据。接下来的每行有2个整数m。

输出
出口第m个小光棍数。

样例输入
1
1

样例输出
471

来源
原创

上传者
wmnwmn

#include "iostream"
using namespace std;
int main(int argc, char const *argv[])
{
    int n;
    cin>>n;
    while(n--)
    {
        long long m;
        cin>>m;
        cout<<(m-1)*1000+471<<endl;
    }
    return 0;
}    
 
#include<stdio.h>//最优程序
int main()
{
    long long a,b,c,d,e;
    scanf("%lld",&a);
    while(a--)
    {
        scanf("%lld",&b);
        printf("%lld\n",(b-1)*1000+471);
    }
    return 0;
}            

**463、


九九乘法表

时光限定:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
孩提学过的九九乘法表或者将会扎根于大家毕生的记得,现在让我们重申这么些温暖的纪念,请编制程序输出九九乘法表.

是那种反过来的三角形形啦,具体如下图:

每四个姿态此前用1个空格
隔离。。。

输入
首先有3个整数N,表示有N组数据(N<10)
接下去由N行,每行只有三个整数M(1<=M<=9);

输出
对应每一个整数M,依据供给输出乘法表的前N行,具体格式参见输入输出样例和上海教室.
每两组测试数据结果里面有三个空行隔开分离,具体如输出样例。

样例输入
3
2
1
5

样例输出
11=1 12=2 13=3 14=4 15=5 16=6 17=7 18=8 19=9
2
2=4 23=6 24=8 25=10 26=12 27=14 28=16 2*9=18

1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9

1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45

来源
原创

上传者
ACM_赵铭浩

#include "iostream"
using namespace std;
int main(int argc, char const *argv[])
{
    int n,i,j,m;
    cin>>n;
    while(n--)
    {
        cin>>m;
        for(i=1; i<=m; i++)
        {
            for(j=i; j<=9; j++)
                cout<<i<<'*'<<j<<'='<<i*j<<' ';
            cout<<endl;
        }
    }
    return 0;
}
   
#include<stdio.h>//最优程序
int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            for(int j=i;j<10;j++)
                printf("%d*%d=%d ",i,j,i*j);
            printf("\n");
        }
    }
}              

**477、


A+B Problem III

日子范围:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
求A+B是否与C相等。

输入
T组测试数据。
每组数据中有多少个实数A,B,C(-10000.0<=A,B<=一千0.0,-三千0.0<=C<=贰仟0.0)
数量保险小数点后不超过4人。

输出
假若相等则输出Yes
不对等则输出No

样例输入
3
-11.1 +11.1 0
11 -11.25 -0.25
1 2 +4

样例输出
Yes
Yes
No

上传者
李文鑫

#include "iostream"
using namespace std;
int main(int argc, char const *argv[])
{
    int n;
    cin>>n;
    while(n--)
    {
        double a,b,c;
        cin>>a>>b>>c;
        if((a+b-c>-0.0001)&&(a+b-c<0.0001))
            cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}    
 
#include <cstdio>//最优程序
#include <math.h>
double a,b,c;
main()
{
    for(scanf("%lf",&a);~scanf("%lf%lf%lf",&a,&b,&c);puts(fabs(c-(a+b))<1e-6?"Yes":"No"));
}        

**484、


The Famous Clock

光阴限制:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
Mr.
B, Mr. G and Mr. M are now in Warsaw, Poland, for the 2012’s ACM-ICPC
World Finals Contest. They’ve decided to take a 5 hours training every
day before the contest. Also, they plan to start training at 10:00 each
day since the World Final Contest will do so. The scenery in Warsaw is
so attractive that Mr. B would always like to take a walk outside for a
while after breakfast. However, Mr. B have to go back before training
starts, otherwise his teammates will be annoyed. Here is a problem: Mr.
B does not have a watch. In order to know the exact time, he has bought
a new watch in Warsaw, but all the numbers on that watch are represented
in Roman Numerals. Mr. B cannot understand such kind of numbers. Can you
translate for him?

输入
Each test case contains a single line indicating a Roman Numerals that
to be translated. All the numbers can be found on clocks. That is, each
number in the input represents an integer between 1 and 12. Roman
Numerals are expressed by strings consisting of uppercase ‘I’, ‘V’ and
‘X’. See the sample input for further information.

输出
For each test case, display a single line containing a decimal number
corresponding to the given Roman Numerals.

样例输入
I
II
III
IV
V
VI
VII
VIII
IX
X
XI
XII

样例输出
Case 1: 1
Case 2: 2
Case 3: 3
Case 4: 4
Case 5: 5
Case 6: 6
Case 7: 7
Case 8: 8
Case 9: 9
Case 10: 10
Case 11: 11
Case 12: 12

来源
HDU

上传者
ACM_宋志恒

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string a;
    int count=1;
    while(cin>>a)
    {
        if(a=="I")
        {
            cout<<"Case "<<count<<": 1"<<endl;
            count++;
        }
        if(a=="II")
        {
            cout<<"Case "<<count<<": 2"<<endl;
            count++;
        }
        if(a=="III")
        {
            cout<<"Case "<<count<<": 3"<<endl;
            count++;
        }
        if(a=="IV")
        {
            cout<<"Case "<<count<<": 4"<<endl;
            count++;
        }
        if(a=="V")
        {
            cout<<"Case "<<count<<": 5"<<endl;
            count++;
        }
        if(a=="VI")
        {
            cout<<"Case "<<count<<": 6"<<endl;
            count++;
        }
        if(a=="VII")
        {
            cout<<"Case "<<count<<": 7"<<endl;
            count++;
        }
        if(a=="VIII")
        {
            cout<<"Case "<<count<<": 8"<<endl;
            count++;
        }
        if(a=="IX")
        {
            cout<<"Case "<<count<<": 9"<<endl;
            count++;
        }
        if(a=="X")
        {
            cout<<"Case "<<count<<": 10"<<endl;
            count++;
        }
        if(a=="XI")
        {
            cout<<"Case "<<count<<": 11"<<endl;
            count++;
        }
        if(a=="XII")
        {
            cout<<"Case "<<count<<": 12"<<endl;
            count++;
        }
    }

    return 0;
}
  
#include<map>//最优程序
#include<iostream>
#include<string>
using namespace std;
map<string,int>m;
int main()
{
    m["I"]=1;
    m["II"]=2;
    m["III"]=3;
    m["IV"]=4;
    m["V"]=5;
    m["VI"]=6;
    m["VII"]=7;
    m["VIII"]=8;
    m["IX"]=9;
    m["X"]=10;
    m["XI"]=11;
    m["XII"]=12;
    string s;
    int c=0;
    while(cin>>s)
        cout<<"Case "<<++c<<": "<<m[s]<<endl;
    return 0;
}        

**596、


何人是最好的Coder

时光限定:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:0

描述
计科班有为数不少Coder,帅帅想知道本人是否汇总实力最强的coder。

帅帅喜欢帅,所以他选了帅气和编制程序水平当做评选正式。

各样同学的汇总得分是帅气程度得分与编程水平得分的和。

他盼望您能写三个程序帮她须臾间。

输入
数量有多组。
输入3个数n,代表计科班的总人数。
接下去有n行数,一行数有五个数a,b。
中间a代表该同学的编制程序水平,b代表该同学的帅气程度。
n=0表示输入完毕。

输出
每组数据占一行,输出全数同学中归纳得分最高的分数。

样例输入
5
9 10
7 11
1 6
5 7
3 5
2
7 3
7 6
0

样例输出
19
13

上传者
wsp0214

#include "stdio.h"
int main()
{
    int n,max=0,a,b,i;
   // freopen("input.txt","r",stdin);
    while(scanf("%d",&n),n)
    {   max=0;
        for(i=0; i<n; i++)
        {
            scanf("%d%d",&a,&b);
            if((a+b)>max)max=(a+b);
        }
        printf("%d\n",max);
    }
    return 0;
}     
 
#include<stdio.h>//最优程序
main(){int n;while(scanf("%d",&n),n){int a,b,s=0;while(n--){scanf("%d%d",&a,&b);if(a+b>s) s=a+b;}printf("%d\n",s);}}        

**599、


加油的小蜗牛

时刻限定:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
轶事中能站在金字塔顶的唯有二种动物,一种是鹰,一种是蜗牛。四头小蜗牛听了这几个传说后,大受鼓舞,立志要爬上金字塔。为了促成协调的愿意,蜗牛找到了老
鹰,老鹰告诉它金字塔高H米,小蜗牛知道1个白天温馨能向上爬10米,但出于夜间要休息,自个儿会骤降5米。它想精通自个儿在第几天能站在金字塔顶,它想让您
帮她写个程序救助它。

输入
率先行有1个整数t,表示t组测试数据。
其次行二个整数H(0<H<10^9)代表金字塔的中度。

输出
出口三个平头n表示小蜗牛第n天站在金字塔顶上

样例输入
2
1
5

样例输出
1
1

上传者
ACM_王孝锋

#include<stdio.h>
int main(void)
{
    int H,i,t;
    scanf("%d",&t);
    for(i=1; i<=t; i++)
    {
        int day=1,h=0;
        scanf("%d",&H);
        while(h+10<H)
        {
            h+=5;
            day++;
        }
        printf("%d\n",day);
    }
    return 0;
}

**733、


万圣节派对

时光限定:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
万圣节有3个Party,XadillaX鲜明也要去凑热闹了。因为去凑热闹的食指很是巨大,几十W的数目级吧,自然要进场就供给有门票了。很幸运的,XadillaX竟然得到了一张真·门票!这真·门票的排列规则有点意外:

  1. 门票号是由0~6组成的6人数(0~6那多少个数字可选取)

  2. 每1个门票号的每种人不可能有多少个延续相同的数字(如123335是卓殊的)

  3. 每三个门票号相邻的两位相差必须在四之下(≤4)(如016245是老大的)

输入
首先行1个n,代表输入个数
接下去n行,每行七个数字x,y(x <= y)

输出
对于每一个测试,输出x到y之间的入场券编号。各个测试结尾之间空行。

样例输入
2
001001 001002
001011 001012

样例输出
001001
001002

001011
001012

来源
NBOJ-1004

上传者
勿念情

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int ticket1, ticket2, i, j;
        int flag1, flag2, flag3;
        char x[6];
        scanf("%d %d",&ticket1, &ticket2);
        for (i = ticket1; i <= ticket2; i++)
        {
            flag1 = 1;
            flag2 = 1;
            flag3=1;
            x[0] = i / 100000 + '0';
            x[1] = i /10000 % 10 + '0';
            x[2] = i / 1000 % 10 + '0';
            x[3] = i / 100 % 10 + '0';
            x[4] = i / 10 % 10 + '0';
            x[5] = i % 10 + '0';
            for (j = 0; j < 6; j++)
                if (x[j] - '0' > 6)
                {
                    flag3 = 0;
                    break;
                }
            for (j = 0; j < 5; j++)
                if (fabs(x[j] - x[j+1]) >4)
                {
                    flag1 = 0;
                    break;
                }
            for (j = 0; j < 4; j++)
                if (x[j] - x[j+1] == 0 && x[j] - x[j+2] == 0)
                {
                    flag2 = 0;
                    break;
                }
            if (flag1 == 1 && flag2 == 1 && flag3 == 1)
            {
                for (j = 0; j < 6; j++)
                    printf("%c",x[j]);
                printf("\n");
            }
        }
        printf("\n");
    }
    return 0;
}

**779、


合肥烧饼

岁月范围:一千ms  |  内存限制:65535 KB

难度:1

描述
火烧有两面,要做好二个南通烧饼,要两面都弄热。当然,1次只可以弄三个来说,功用就太低了。有诸如此类二个大平底锅,叁回能够而且放入k个长春烧饼,一分钟能源办公室好一面。目前后有n个石家庄烧饼,至少必要有个别分钟才能一切抓牢呢?

输入
逐一输入n和k,中间以空格分隔,当中1 <= k,n <= 一千00

输出
出口全部搞好至少供给的分钟数

样例输入
3 2

样例输出
3

提示
如样例,八个温州烧饼编号a,b,c,首先a和b,然后a和c,最终b和c,3分钟到位

上传者
勿念情

#include<stdio.h>
int main() {
    int n, k;
    while (scanf("%d%d", &n, &k) != EOF) {
        if (n < k)
            printf("2\n");
        else {
            if (2 * n % k == 0)
                printf("%d\n", 2 * n / k);
            else
                printf("%d\n", 2 * n / k + 1);
        }
    }
    return 0;
}

**811、


变态最大值

时光限定:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
Yougth讲课的时候考察了须臾间求几个数最大值那一个标题,没悟出大家精晓的如此烂,幸好在他的鼎力相助下大家算是化解了这一个题材,不过难题又来了。

她想在一组数中找二个数,这几个数能够不是这组数中的最大的,可是如若相相比较较大的,可是满足那个规格的数太多了,如何做呢?他想到了三个办法,把这一组数从开端把每相邻八个数分成一组(组数是从1方始),奇数组的求最大值,偶数组的求最小值,然后找出那么些值中的最大值。

输入
有多组测试数据,以文件停止符为标志。
每组测试数据首先1个N,是数组中数的个数。(0<N<一千0,为下降标题难度,N是3的翻番)
然后是数组中的那一个数。

输出
输出包蕴一行,便是内部的最大值。

样例输入
3
4 5 6
6
1 2 3 7 9 5

样例输出
6
5

来源
Yougth原创

上传者
TC_杨闯亮

#include "iostream"
using namespace std;
int max1(int a,int b,int c)//我去,这里用的max,尼玛
{
    int t;
    if(a>b){t=a;a=b;b=t;}
    if(a>c){t=a;a=c;c=t;}
    if(b>c){t=b;b=c;c=t;}
    return c;
}
int min1(int x,int y,int z)
{
    int m;
    if(x>y){m=x;x=y;y=m;}
    if(x>z){m=x;x=z;z=m;}
    if(y>z){m=y;y=z;z=m;}
    return x;
}
int main(int argc, char const *argv[])
{
    int n,i,d[10001],e[4000];
    while(cin>>n)
    {
        int max=0;
        for(i=1;i<=n;i++)
        {
            cin>>d[i];
        }
        for(i=3;i<=n;i+=3)
        {
            if((i/3)%2==1)
            {
                e[i/3]=max1(d[i-2],d[i-1],d[i]);
            }
            if((i/3)%2==0)
            {
                e[i/3]=min1(d[i-2],d[i-1],d[i]);
            }
        }
        max=e[1];
        for(i=2;i<=n/3;i++)
            if(e[i]>max) max=e[i];
        cout<<max<<endl;
    }
    return 0;
}
  
#include <cstdio>//最优程序
#define Max(a,b,c) a>(b>c?b:c)?a:(b>c?b:c)
#define Min(a,b,c) a>(b>c?c:b)?(b>c?c:b):a
int main()
{
    int a[10005];
    int n,i,j,h;
    while(~scanf("%d",&n))
    {
        int max=1<<32;
        for(i=0;i<n&&scanf("%d",&a[i]);i++){}
        for(i=0;i<n;i+=3){
            h=i%2==0?Max(a[i],a[i+1],a[i+2]):Min(a[i],a[i+1],a[i+2]);
            max=h>max?h:max;
        }
        printf("%d\n",max);
    }
    return 0;
}               

**813、


对决

岁月范围:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:0

描述
Topcoder 招进来了 n
个新校友,Yougth陈设把这么些n个同学分成两组,供给每组中各种人必须跟另一组中每个同学进行贰回算法对决,问存不存在一种分组办法在k场实现对决。(两组中每一组中人数都要大于0)

输入
有多组测试数据,每组测试数据三个数 n 和 k
,n和k都为0时代表输入完结。(0<n<一千0,0<k<一千000)

输出
输出一行,假如能够,输出YES,不行的话输出NO。

样例输入
4 1
4 3
4 4
2 1
3 3
0 0

样例输出
NO
YES
YES
YES
NO

提示
二位分为两组,1和3则需对决3场,2和2则需对决4场。

来源
Yougth原创

上传者
TC_杨闯亮

#include "stdio.h"
int main(int argc, char const *argv[])
{
    int i,n,k;
    while(scanf("%d%d",&n,&k),n,k)
    {
        int jt=0;
        for(i=0; i<n; i++)
        {
            if(k==i*(n-i))
            {
                printf("YES\n");
                jt=1;
                break;
            }
        }
        if(jt==0)
            printf("NO\n");
    }
    return 0;
}   
 
#include <cstdio>//最优程序

int main()
{
    int n,k;
    while(scanf("%d%d",&n,&k)&&(n||k))
    {
        int ok=0;
        for(int i=1;i<=n/2;i++)
        {
            if(i*(n-i)==k)
                ok=1;continue;
        }
        if(ok)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}             

**822、


画图

时间限定:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:0

描述
处理器画图也挺有意思的哈!那大家就来用总结机画幅图吧。。。

输入
输入二个正整数N(0<N<=10),表示要出口的长方形的边际*的个数

输出
出口1个满足题意的长方形

样例输入
4

样例输出



上传者
TC_赵坤垚

#include "stdio.h"
int main(int argc, char const *argv[])
{
    int n,i,j;
    scanf("%d",&n);
    for (i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

**833、


取石子(七)

岁月范围:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
Yougth和Hrdv玩三个游戏,拿出n个石子摆成一圈,Yougth和Hrdv分别从个中取石子,哪个人先取完者胜,每一遍可以从中取一个还是相邻三个,Hrdv先取,输出胜利着的名字。

输入
输入包罗多组测试数据。
每组测试数据1个n,数据保障int范围内。

输出
出口胜利者的名字。

样例输入
2
3

样例输出
Hrdv
Yougth

来源
Poj

上传者
TC_杨闯亮

#include <stdio.h>
int main(void) {
    int n;
    while (scanf("%d", &n) != EOF) {
        if (n < 3)
            printf("Hrdv\n");
        else
            printf("Yougth\n");
    }
}
 
#include<cstdio>
int n;
int main()
{
    while(~scanf("%d",&n))
        printf(n>=3?"Yougth\n":"Hrdv\n");
    return 0;
}        

**844、


A+B Problem(V)

时光限定:1000ms  |  内存限制:65535 KB

难度:1

描述
做了A+B
Problem之后,Yougth感觉太简单了,于是他想让你求出四个数反转后相加的值。帮帮他啊

输入
有多组测试数据。每组包涵八个数m和n,数据保险int范围,当m和n同时为0是象征输入完成。

输出
出口反转后相加的结果。

样例输入
1234 1234
125 117
0 0

样例输出
8642
1232

来源
Yougth原创

上传者
TC_杨闯亮

#include <stdio.h>

/* 整数反转 */
long long rev(int a) {
    long long s = 0;

    while (a) {
        s = s * 10 + a % 10;
        a /= 10;
    }
    return s;
}

int main(void) {
    int m, n;
    long long M, N;

    while (1) {
        scanf("%d%d", &m, &n);
        if (m == 0 && n == 0)
            break;
        printf("%lld\n", rev(m) + rev(n));
    }
    return 0;
}
 
#include <iostream>//最优程序
#include <string>
using namespace std;
int main()
{
    string s,t;
    int x,y;
    while(cin>>s>>t)
    {
        int x=0,y=0;
        if(s[0]=='0'&&t[0]=='0')
            break;
        for(int i=s.size()-1;i>=0;i--)
            x=x*10+(s[i]-'0');
        for(int i=t.size()-1;i>=0;i--)
            y=y*10+(t[i]-'0');
        cout<<x+y<<endl;
    }
    return 0;
}       

**845、


无主之地1

日子范围:1000ms  |  内部存款和储蓄器限制:65535 KB

难度:0

描述

晓近来在玩无主之地1,他对那么些娱乐的评价不错,结合了FPS与昂CoraPG成分,可玩度很高。可是,他发现了时期的天职系统做的倒霉,职责系统并从未帮他总结清楚哪些区域有些许任务,而且,给职务的时候啊,也正如散乱。比如,在1区域的二个职分点,你领取了陆个任务;2区域的三个任务点,你领取了一个职分;游
戏一段时间后,你又在1区域另贰个职分点个领到了3职务(以前职务没有达成),3区域领到了捌个任务……他觉得很混乱,今后他要统一筹划贰个程序来总计每一种区
域有稍许个职责。

输入
多组测试数据,以输入0 0停止
每组数据占一行,输入m区域,n个职分(0<m,n<100)

输出
出口每个地方的总括结果(不供给排序)

样例输入
1 3
2 3
3 4
1 7
0 0

样例输出
1 10
2 3
3 4

来源
原创

上传者
TC_高金

#include <stdio.h>

int main()
{
    int m,n,i,j;
    int a[100]= {0};
    int c[100]= {0},k=0;
    while(scanf("%d %d",&m,&n)&&m&&n)
    {
        a[m]+=n;
        c[k++]=m;
    }
    for(i=0; i<k-1; i++)
    {
        for(j=i+1; j<k; j++)
        {
            if(c[i]==c[j])
                c[j]=0;
        }
    }
    for(i=0; i<k; i++)
    {
        if(c[i]!=0)
        {
            printf("%d %d\n",c[i],a[c[i]]);
            c[i]=0;
        }
    }
    return 0;
}

**975、


关于521

时刻限定:一千 ms  |  内存限制:65535 KB

难度:2

描述
Acm队的流年对数学的研究不是很透彻,不过一意孤行的他要么想八只扎进去。


览网页的运气忽然看到了网上有人用玫瑰花瓣拼成了521多少个数字,立即觉得好性感,因为每一个男子都会不注意的成为妖冶的创立者。此后,小运走到哪里都能看
到⑤ 、二 、1几个数字,他怒了,今后他想清楚在一连的数中有个别许数任何带有了那四个数字。例如12356就算3个,而5111就不算。尤其的,假诺她看出
了521四个数一连现身,会特别的义愤。例如35210。

输入
多组测试数据:
一行给定多个数a,b(0<a,b<一千000),表示数字的启幕和得了。

输出
一行展现她想要知道的数有多少个及浮现有个别许个数字令她特意的愤慨。用空格隔断。

样例输入
200 500300 9001 600

样例输出
Case 1:2 0Case 2:2 1Case 3:6 1

来源
流年

上传者
ACM_安鹏程

#include <iostream>
#include <string.h>
using namespace std;
int array[2][1000010];
int main()
{
    int a, b, c;
    int cnt = 0, cntp = 0;
    memset(array, 0, sizeof(array));
    for (int i = 1; i <= 1000000; i++)
    {
        a = b = c = 0;
        if ((i/100000)%10 == 1 || (i/10000)%10 == 1
                || (i/1000)%10 == 1 || (i/100)%10 == 1 || (i/10)%10 == 1 || i%10 == 1)
            a = 1;
        if ((i/100000)%10 == 2 || (i/10000)%10 == 2
                || (i/1000)%10 == 2 || (i/100)%10 == 2 || (i/10)%10 == 2 || i%10 == 2)
            b = 1;
        if ((i/100000)%10 == 5 || (i/10000)%10 == 5
                || (i/1000)%10 == 5 || (i/100)%10 == 5 || (i/10)%10 == 5 || i%10 == 5)
            c = 1;
        if (a && b && c)
            ++cnt;
        if ((i/1000)%1000 == 521 || (i/100)%1000 == 521
                || (i/10)%1000 == 521 || (i%1000) == 521)
            ++cntp;
        array[0][i] += cnt;
        array[1][i] += cntp;
    }
    int x, y, ca = 0;
    while (cin >> x >> y)
    {
        cout << "Case " << ++ca << ":";
        cout << array[0][y] - array[0][x-1] << " "
             << array[1][y] - array[1][x-1] << endl;
    }
    return 0;
}   
 
#include<stdio.h>//最优程序
int a[2][1000001]={0};
int main()
{
int k=0,i,sum=0;
for(i=1;i<=1000000;i++)
{
if((i%10==5||(i/10)%10==5||(i/100)%10==5||(i/1000)%10==5||(i/10000)%10==5||(i/100000)%10==5)&&(i%10==2||(i/10)%10==2||(i/100)%10==2||(i/1000)%10==2
||(i/10000)%10==2||(i/100000)%10==2)&&(i%10==1||(i/10)%10==1||(i/100)%10==1||(i/1000)%10==1||(i/10000)%10==1||(i/100000)%10==1))
{sum++;
if(i/1000==521||(i/100)%1000==521||(i/10)%1000==521||i%1000==521)k++;}
a[0][i]+=sum;
a[1][i]+=k;
}
int m,n,w=0;
while(scanf("%d%d",&n,&m)!=EOF)
printf("Case %d:%d %d\n",++w,a[0][m]-a[0][n-1],a[1][m]-a[1][n-1]);
}             

**1071、


不可以!

光阴限制:一千ms  |  内部存款和储蓄器限制:65535 KB

难度:1

描述
认清:七个数x、y的正负性。

渴求:不可能动用比较运算符,即”<“,”>”,”<=”,”>=”,”==”,”!=”。

图片 8

输入
有多组数据,每组数据占一行,每一行多少个数x,y。
x、y保证在int范围内。

输出
每组数据输出占一行。
比方三个数是一正一负,输出”Signs are opposite”
一经是同为正或同为负,输出”Signs are not opposot”
若是不也许明确,输出”Signs can’t be sure”
出口不包含引号

样例输入
1 1
-1 1

样例输出
Signs are not opposot
Signs are opposite

提示
如对本题有啥难点,请到斟酌区提问或邮件小编!

来源
爱生活

上传者
TCM_张鹏

/*
 * http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1071
 * by jtahstu on 2015/2/11 15:00 
 * copy csdn 听自己心跳的声音 
 * http://blog.csdn.net/u013634213/article/details/40055329
 */
#include<cstdio>
#include<cstring>
int main() {
    int a, b;
    while (scanf("%d%d", &a, &b) != EOF) {
        if (!(a * b)) {
            puts("Signs can't be sure");
            continue;
        }
        if ((a >> 31) ^ (b >> 31))
            puts("Signs are opposite");
        else
            puts("Signs are not opposot");
    }
    return 0;
}
  
#include<stdio.h>//最优程序
int main()
{
    int a,b,c;
    while(~scanf("%d%d",&a,&b))
    {
        c=((a>>31)&1)+((b>>31)&1);
        if((!a)||(!b))printf("Signs can't be sure\n");
        else printf("Signs are %s\n",c&1?"opposite":"not opposot");
    }
}        

**1092、


数字分隔(二)

时限:一千 ms  |  内部存款和储蓄器限制:65535 KB

难度:3

描述
在一个时代久远的国度,银行为了更快更好的拍卖用户的订单,决定将一整串的数字根据一定的平整分隔离来,分隔规则如下:

一 、实数的整数有个别依据每多个数字用逗号分隔开分离(整数有的的上位有结余的0时,需先将多余的0过滤后,再拓展数字分隔,如:0001234567
输出结果为1,234,567.00)

② 、小数部分保留两位小数(四舍五入)

三 、要是该数是负的,则在出口时需用括号将分隔后的数字括起来,例如:-一千5.1645的输出结果为(10,005.16)
 

输入
多组测试数据,每行输入贰个实数n(n的位数小于100)

输出
出口分隔后的结果

样例输入
00012345670.0000-10005.1645

样例输出
1,234,567.000.00(10,005.16)

来源
calamity_coming

上传者
ACM_孙毓阳

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char s[110],t[110],r[110];
    while(cin>>s)
    {
        memset(r,'\0',sizeof(r));
        memset(t,'\0',sizeof(t));
        int i,l,poi=0,dis,car,k=0,f=1,j=0;
        l=strlen(s);
        for(i=s[0]=='-'?1:0; i<l; i++)//处理原字符串
        {
            if(s[i]!='0'&&f)
            {
                if(s[i]=='.')
                    t[j++]='0';
                f=0;
            }
            if(s[i]=='0'&&f) continue;
            else t[j++]=s[i];
        }
        if(!j) {
                t[j++]='0';f=0;//判断当原字符串为0时的情况
        }
        for(i=0; i<j; i++)
        {
            if(t[i]=='.')
            {
                poi=i;//找出小数点的位置
                f=1;//如果有小数点,则f置1
                break;
            }
        }
        if(f)//当字符串有小数点时
        {
            dis=j-1-poi;//计算小数点到字符串末尾的距离
            if(dis==2) for(i=j-1; i>=0; i--)r[k++]=t[i];//如果只有两位小数,原样输出
            else if(dis==1)//如果有一位小数,则最后一位补0
            {
                r[k++]='0';
                for(i=j-1; i>=0; i--) r[k++]=t[i];
            }
            else//如果距离大于2
            {
                if(t[poi+3]<'5') for(i=poi+2; i>=0; i--)r[k++]=t[i];//如果第三位小数小于5
                else//如果第三位小数大于5
                {
                    car=1;
                    for(i=poi+2; i>=0; i--)
                    {
                        if(t[i]=='.')
                        {
                            r[k++]=t[i];
                            continue;
                        }
                        if(car) t[i]+=1;
                        if(t[i]>'9')
                        {
                            t[i]='0';
                            car=1;
                        }
                        else car=0;
                        r[k++]=t[i];
                    }
                    if(t[0]=='0')
                        r[k++]='1';
                }
            }
        }
        else for(i=j-1; i>=0; i--)r[k++]=t[i];//没有小数点,原样输出
        if(s[0]=='-')//如果是负数
        {
            if(!f)
            {
                cout<<'(';//负数需要在字符串前后加上括号
                for(i=k-1; i>=0; i--)
                {
                    cout<<r[i];
                    if(i%3==0&&i) cout<<',';//控制','的位置
                }
                cout<<".00"<<')'<<endl;//没有小数点,补上小数点和两位零
            }
            else
            {
                cout<<'(';
                for(i=k-1; i>=0; i--)
                {
                    cout<<r[i];
                    if(i%3==0&&i>3) cout<<',';
                }
                cout<<')'<<endl;
            }
        }
        else
        {
            if(!f)
            {
                for(i=k-1; i>=0; i--)
                {
                    cout<<r[i];
                    if(i%3==0&&i) cout<<',';
                }
                cout<<".00"<<endl;
            }
            else
            {
                for(i=k-1; i>=0; i--)
                {
                    cout<<r[i];
                    if(i%3==0&&i>3) cout<<',';
                }
                cout<<endl;
            }
        }
    }
}        

**1104、


就作者不坑

时刻限定:1000ms  |  内部存储器限制:65535 KB

难度:0

描述
as we all know
,就作者不坑,呵呵,当然,此次小编或然不坑,作者只让你帮自个儿翻译一下数字即可。

所谓翻译,便是将一个数字用普通话读出来,非常粗略吗,快快AC吧。

数字的华语表示分别为:零、壹 、2、③ 、4、五 、六 、7、8、玖 、10、佰、仟、万、亿.

输入
int 范围内,保障科学,EOF。

输出
用作者给您的国语写出来就好了

样例输入
10
1052
10000

样例输出
壹拾
一千零伍拾贰
叁万

提示
自己确实不坑。

来源
您管小编啊

上传者
ACM_刘炀

这题换题了,之前不是这题目,所以就粘贴了一份来
 
#include<stdio.h>
#include<string.h>
int main()
{
    char ch[20];
    int len,i,k,t,p;
    while(scanf("%s",ch)!=EOF)
    {
        k=0;p=1;
        len=strlen(ch);
        for(i=0;i<len;i++)
        {
            t=len-k;
            if(ch[i]=='0'&&(t-1)%4!=0&&ch[i+1]!='0'||ch[0]=='0')    printf("零");
            if(ch[i]=='1')    printf("壹");
            if(ch[i]=='2')    printf("贰");
            if(ch[i]=='3')    printf("叁");
            if(ch[i]=='4')    printf("肆");
            if(ch[i]=='5')    printf("伍");
            if(ch[i]=='6')    printf("陆");
            if(ch[i]=='7')    printf("柒");
            if(ch[i]=='8')    printf("捌");
            if(ch[i]=='9')    printf("玖");
            if(ch[i]!='0'||(t-1)%4==0)
            {
                if(t==10)    printf("拾");
                if(t==9)    printf("亿"); 
                if(t==8)    printf("仟");
                if(t==7)    printf("佰");
                if(t==6)    printf("拾");
                if(t==5&&(ch[k]!='0'||ch[k-1]!='0'||ch[k-2]!='0'||ch[k-3]!='0'))    printf("万");
                if(t==4)    printf("仟");
                if(t==3)    printf("佰");
                if(t==2)    printf("拾");
                
            }
            k++; 
        }
        printf("\n");
    }
    
    return 0;
}               

**           OK,本文到此也就得了了,也花了自身好多少个时辰的时间,但AC那个题却用了几许个月,花了十分长的时日,也是边刷边读书,不断立异,下次再写汇总也不知何年何月了,但还会写别的的,登时学java了,又有的写了,稳步来。