PAT天梯赛Level1题目题解汇总

L1-001 Hello World

#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
int main()
{
    cout<<"Hello World!"<<endl;
    return 0;
}
L1-002 打印沙漏

#include <string>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <stack>
using namespace std;
char ch;
//打印星号的函数,该函数用来打印每一行的星号。
void print_star(int num_star,int num_space)
{
    while(num_space--)
        printf(" ");
    while(num_star--)
    {
        printf("%c",ch);
    }
    printf("\n");
}
int main()
{
    int n,i,j,temp;
    scanf("%d",&n);
    int sum1=0,sum2=0;
    getchar();
    scanf("%c",&ch);
    stack<int>s1;
    stack<int>s2;
    for(i = 1 ;sum2<n; i=i+2)
    {
        sum1=sum1+i;
        s1.push(i);
        sum2=2*sum1-1;
    }
    if(sum2>n)
    {
        s1.pop();
        i=i-2;
        sum2=2*(sum1-i)-1;
    }
    j=0;
    while(!s1.empty())
    {
        temp=s1.top();
        s2.push(temp);
        s1.pop();
        print_star(temp,j++);
    }
    s2.pop();
    j=j-2;
    while(!s2.empty())
    {
        temp=s2.top();
        print_star(temp,j--);
        s2.pop();
    }
    printf("%d\n",n-sum2);
    return 0;
}
L1-003
#include <iostream>
#include <cstdio>
#include <string.h>
#include <math.h>
#include <string.h>
using namespace std;
int main()
{
    int a[10],i;
    char s1[1005];
    scanf("%s",s1);
    memset(a,0,sizeof(a));
    int len=strlen(s1);
    for(i=0;i<len;i++)
    {
        a[s1[i]-'0']++;
    }
    for(i=0;i<10;i++)
        if(a[i])
        {
            printf("%d:%d\n",i,a[i]);
        }
    return 0;
}
L1-004 计算摄氏温度

#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
int main()
{
    double C,F;
    cin>>F;
    C = 5*(F-32)/9;
    cout<<"Celsius = "<<(int)C<<endl;
    return 0;
}
L1-005 考试座位号

#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
struct M
{
    char s[20];
    int    n1;
    int    n2;
}a[1005];
int main()
{
    int T,n3,b[1005],i,j;
    scanf("%d",&T);
    for(i=0;i<T;i++)
    {
        scanf("%s%d%d",a[i].s,&a[i].n1,&a[i].n2);
    }
    scanf("%d",&n3);
    for(i=0;i<n3;i++)
        scanf("%d",&b[i]);
    for(i=0;i<n3;i++)
    {
        for(j=0;j<T;j++)
        {
            if(b[i] == a[j].n1)
            {
                printf("%s %d\n",a[j].s,a[j].n2);
                break;
            }
        }
    }
    return 0;
}
L1-006 连续因子

/**
题目没什么难的,但是就是感觉题目意思容易误解,
首先题目强调了1不算在因子内,这点一定要主义。
其次要最长连续因子,并且这些因子成起来后依然是
题目给出数字的因子。
例如12: 因子2 3 4 6.
按照题目意思,最长连续因子长度为2,是2 3.
而不是2 3 4.因为2*3*4=24,24不是12的因子。
*/
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>

using namespace std;

int main() {
    int N;
    while(~scanf("%d",&N)) {
        int limit,i,j,nowLen,start,maxLen,M;
        limit = (int)sqrt(N);
        i = 2;      //从第一个能整除的因子开始
        maxLen = 0;   //最长连续因子为0.
        while(i <= limit+1) {
            M = N;
            if(M%i == 0) {
                nowLen = 0;
                j = i;
                while(M%j==0 && j<=limit+1) {
                    nowLen++;
                    M = M/j;
                    j++;
                }
                if(nowLen > maxLen) {
                    maxLen = nowLen;
                    start = i;
                }
            }
            i++;
        }
        if(maxLen == 0) {
            printf("1\n%d\n",N);
        }
        else {
            printf("%d\n",maxLen);
            for(i = start; i < start+maxLen; i++) {
                if(i == start) {
                    printf("%d",i);
                }
                else {
                    printf("*%d",i);
                }
            }
            printf("\n");
        }
    }
    return 0;
}
L1-007 念数字

/**
使用C++中STL的map,从数字映射到字符串。
**/
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <map>
using namespace std;
int main()
{
    int i;
    char a[100];
    map<int,string>m;
    m[0] = "ling";
    m[1] = "yi";
    m[2] = "er";
    m[3] = "san";
    m[4] = "si";
    m[5] = "wu";
    m[6] = "liu";
    m[7] = "qi";
    m[8] = "ba";
    m[9] = "jiu";
    scanf("%s",a);
    int len=strlen(a);
    if(a[0] == '-'){
        printf("fu");
        for(i=1;i<len;i++)
            cout<<" "<<m[a[i]-'0'];
        printf("\n");
    }
    else{
        for(i=0;i<len;i++){
            if(i)
                cout<<" "<<m[a[i]-'0'];
            else
                cout<<m[a[i]-'0'];
        }
        printf("\n");
    }
    return 0;
}
L1-008 求整数段和

#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <stack>
using namespace std;
int main()
{
    int A,B,i,j,sum=0;
    scanf("%d%d",&A,&B);
    j=0;
    for(int i=A;i<=B;i++)
    {

        sum=sum+i;
        printf("%5d",i);
        j++;
        if(j%5==0)
            printf("\n");
    }
    if(j%5!=0)
        printf("\n");
    printf("Sum = %d\n",sum);
    return 0;
}
L1-009 N个数求和

/**
解题思路:
这道题目我的基本思路是,将输入的一个个分数,都看成字符串,然后提取出分子和分母,设当前和值为FZ/FM(FZ是汉语分子的首字母缩写,FM是汉语分母的首字母缩写)
则现在输入一个串,例如  -2/5,  
则我先求出这个分数的分子fz,分母fm,
则当前和值为 :  (FZ/FM)+ (fz/fm)
通分得:      = (FZ*fm+FM*fz)/(FM*fm)
然后求(FZ*fm+FM*fz)
但是对于这样的想法,也是有普通情况的。比如当前输入的这个串fz是等于0的,则不管分母是什么,这个数都不用加。
比如测试数据:
2
2/5 0/1 
第二个分数分子是0,则这个数是0,则直接跳过不要考虑了。
如果有这种情况:
4
2/5 0/1 -2/5 3/5
则当要加上第三个数时,
(FZ*fm+FM*fz)   分子得0,这时候千万不要再去求公约数了。当前的和值为0.
则让FZ = 0   FM = 1;
这样的话输入下一个分数时,FZ/FM + fz/fm   其分子   FZ*fm+FM*fz = 0*fm + 1*fz = fz; 
其分母 FM*fm = 1*fm = fm ,刚好就等于 fz/fm = 0+fz/fm
**/
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<cmath>
#define INF 999999

using namespace std;

int FZ,FM,fz,fm;
//FZ当前和的分子,FM当前和的分母,fz当前求得分子,fm当前求得分母
//辗转相除法求n和m的求最大公约数
int gcd(int n,int m)
{
    int temp,r;
    n = abs(n);  //都取绝对值,先不用考虑符号
    m = abs(m);  //都取绝对值,先不用考虑符号
    if(n < m)    //辗转相除,我要让n是大的数,m是小的数,因此这里要进行比较
    {
        temp = n;
        n = m;
        m = temp;
    }
    while(1)     //辗转相除法
    {
       r = n%m;
       if(r != 0)
       {
           n = m;
           m = r;
       }
       else
        return m;
    }
}
void fun(char str[]) //求分子,分母
{
    int len;
    int i;
    len = strlen(str);
    fz = 0;
    if(str[0]=='-') //分子是负数
    {
        for(i = 1; i < len; i++)
        {
            if(str[i]=='/')  //到除号截止
                break;
            fz = fz*10 + (str[i]-'0');
        }
        fz = -1*fz;  //变成它的相反数
    }
    else  ///分子是正数
    {
        for(i = 0; i < len; i++)
        {
            if(str[i]=='/')
                break;
            fz = fz*10 + (str[i]-'0');
        }
    }
    fm = 0;          //分母是0
    i++;             //跳过分号
    if(str[i]=='-')  //如果分母是负数
    {
        for(i = i+1;i < len; i++)  //跳过负号
        {
            fm = fm*10 + (str[i]-'0');
        }
        fm = -1*fm;        //取相反数
    }
    else  //分母是正数
    {
        for(; i < len; i++)
        {
            fm = fm*10 + (str[i]-'0');
        }
    }
}
int main()
{
    char s[500];
    int N;  //N个分数相加
    while(~scanf("%d",&N))
    {
        scanf("%s",s);  //先输入第一个分数
        fun(s);         //求分子分母
        if(fz == 0)     //第一个数是0
        {
            FZ = 0;
            FM = 1;
        }
        else
        {
            FZ = fz;
            FM = fm;
        }
        for(int i = 1; i < N; i++)
        {
            scanf("%s",s);  //输入分数
            fun(s);         //求分子分母
            if(fz == 0)     //代表当前输入的值为0,不用加,直接跳过
                continue;
            fz = FZ*fm + FM*fz;  //这两部是通分
            fm = FM*fm;
            if(fz == 0)   //说明当前分子是0,即当前和值变为0
            {
                FZ = 0;
                FM = 1;
            }
            else          //否则求最大公约数,化简分数
            {
                int num = gcd(fz,fm);  //求最大公约数
                FZ = fz/num;            //化简分数
                FM = fm/num;            //化简分数
            }
        }
        if(FZ == 0)       //如果分子为0,则输出0
            printf("0\n");
        else if((FZ>0&&FM>0)||(FZ<0&&FM<0))  //分子分母同号
        {
            FZ = abs(FZ);       //不管正负,直接求绝对值
            FM = abs(FM);
            if(FZ%FM == 0)      //分子除尽分母,这种情况答案是整数。
                printf("%d\n",FZ/FM);
            else
            {
                int t = FZ/FM;
                if(t)            //这种情况是假分数。
                    printf("%d %d/%d\n",t,FZ-t*FM,FM);
                else
                    printf("%d/%d\n",FZ,FM);
            }
        }
        else if((FZ>0&&FM<0)||(FZ<0&&FM>0))
        {
            printf("-");  ///先输出负号
            FZ = abs(FZ);
            FM = abs(FM);
            if(FZ%FM == 0)
                printf("%d\n",FZ/FM);
            else
            {
                int t = FZ/FM;
                if(t)  ///是假分数
                    printf("%d %d/%d\n",t,FZ-t*FM,FM);
                else
                    printf("%d/%d\n",FZ,FM);
            }
        }
    }
    return 0;
}

L1-010 比较大小

#include <stdio.h>

int main() {
    int a,b,c;
    while(~scanf("%d%d%d",&a,&b,&c)) {
        if(a>b) {
            int t = a;
            a = b;
            b = t;
        }
        if(c>=b) {
            printf("%d->%d->%d\n",a,b,c);
        }
        else if(c <= a) {
            printf("%d->%d->%d\n",c,a,b);
        }
        else {
            printf("%d->%d->%d\n",a,c,b);
        }
    }
    return 0;
}
L1-011 A-B

#include <stdio.h>
#include <string.h>

char a[10005],b[10005];
int vis[300];
int main() {
    gets(a);
    gets(b);
    memset(vis,0,sizeof(vis));
    for(int i = 0; i < (int)strlen(b); i++) {
        vis[b[i]] = 1;   //把出现过的字母标记。
    }
    for(int i = 0; i < (int)strlen(a); i++) {
        if(vis[a[i]] == 0) {
            printf("%c",a[i]);
        }
    }
    printf("\n");
    return 0;
}
L1-012 计算指数

#include <stdio.h>

int main() {
    int N;
    while(~scanf("%d",&N)) {
        printf("2^%d = %d\n",N,1<<N); //使用移位运算
    }
    return 0;
}
L1-013 计算阶乘和

#include <stdio.h>

int ans[12];
void fun() {
    ans[0] = 0;
    int mul = 1;
    for(int i = 1; i <= 10; i++) {
        mul = mul*i;
        ans[i] = ans[i-1] + mul;
    }
}
int main() {
    int N;
    fun();
    while(~scanf("%d",&N)) {
        printf("%d\n",ans[N]);
    }
    return 0;
}
L1-014 简单题

#include <stdio.h>

int main() {
    printf("This is a simple problem.");
    return 0;
}
L1-015 跟奥巴马一起画方块

#include <stdio.h>

int main() {
    int N;
    char ch;
    while(~scanf("%d %c",&N,&ch)) {
        for(int i = 1; i <= (N+1)/2; i++) {
            for(int j = 1; j <= N; j++) {
                printf("%c",ch);
            }
            printf("\n");
        }
    }
}
L1-016 查验身份证

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

string ans[102];
int power[20] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char Map[12] = {'1','0','X','9','8','7','6','5','4','3','2'};
bool isLegal(string id) {
    int sum;
    if(id.length() != 18) {  //身份证号不是18位。
        return false;
    }
    else {
        sum = 0;
        for(int i = 0; i < 17; i++) {
            if(id[i]>='0' && id[i]<='9') {
                sum = sum + (id[i]-'0')*power[i];
            }
            else {
                return false;
            }
        }
        sum = sum%11;
        if(Map[sum] == id[17]) {
            return true;
        }
        else {
            return false;
        }
    }
}
int main() {
    int N;
    while(~scanf("%d",&N)) {
        int cnt = 0;
        string str;
        for(int i = 0; i < N; i++) {
            cin>>str;
            if(!isLegal(str)) {
                ans[cnt++] = str;
            }
        }
        if(cnt == 0) {
            cout<<"All passed"<<endl;
        }
        else {
            for(int i = 0; i < cnt; i++) {
                cout<<ans[i]<<endl;
            }
        }
    }
    return 0;
}
L1-017 到底有多二

#include <stdio.h>
#include <string.h>

char str[55];
int main() {
    while(~scanf("%s",str)) {
        int a=0,b=0,len;
        len = strlen(str);
        for(int i = 0; i < len; i++) {
            if(str[i]>='0'&&str[i]<='9') {
                b++;
                if(str[i] == '2') {
                    a++;
                }
            }
        }
        double ans = (a*1.0)/b;
        if(str[0] == '-') {
            ans = ans*1.5;
        }
        if((str[len-1]-'0')%2 == 0) {
            ans = ans*2;
        }
        ans = ans*100;
        printf("%.2lf%%\n",ans);
    }
    return 0;
}
L1-018  大笨钟

#include <stdio.h>

char time[50];
int main() {
    int hour,minute;
    while(~scanf("%s",time)) {
        hour = (time[0]-'0')*10 + time[1]-'0';
        minute = (time[3]-'0')*10 + time[4]-'0';
        if(hour<=11 || (hour==12&&minute==0)) {
            printf("Only %s.  Too early to Dang.\n",time);
        }
        else {
            hour = hour%12;
            int cnt = hour;
            if(minute != 0) {
               cnt++;
            }
            for(int i = 0; i < cnt; i++) {
                printf("Dang");
            }
            printf("\n");
        }
    }
    return 0;
}
L1-019 谁先倒

#include <stdio.h>

int main() {
    int M,N,num;
    int a1,a2,b1,b2;  //甲喊,甲划,乙喊,乙划
    while(~scanf("%d%d",&M,&N)) {
        scanf("%d",&num);
        int cnt1=0,cnt2=0;
        bool flag = false;
        for(int i = 0; i < num; i++) {
            scanf("%d%d%d%d",&a1,&a2,&b1,&b2);
            if(flag) continue;
            //都输
            if(a1+b1==a2 && a1+b1==b2) {
                continue;
            }
            else if(a1+b1!=a2 && a1+b1!=b2) {
                continue;
            }
            else if(a1+b1 == a2){
                M--;
                cnt1++;
                if(M == -1) {
                    printf("A\n%d\n",cnt2);
                    flag = true;
                }
            }//甲输
            else{
               N--;
               cnt2++;
               if(N==-1) {
                    printf("B\n%d\n",cnt1);
                    flag = true;
                }
            }//乙输
        }
    }
    return 0;
}

L1-020 帅到没朋友

#include <stdio.h>
#include <string.h>

int vis[1000000];
int visans[1000000];
int ans[1000000];
int Max(int a,int b) {
    return a>b?a:b;
}
int main() {
    int N,M,a,cnt;
    while(~scanf("%d",&N)) {
        memset(vis,0,sizeof(vis));
        memset(visans,0,sizeof(visans));
        cnt = 0;
        for(int i = 0; i < N; i++) {
            scanf("%d",&M);
            for(int j = 0; j < M; j++) {
                scanf("%d",&a);
                vis[a] = Max(vis[a],M);
            }
        }
        scanf("%d",&M);
        for(int i = 0; i < M; i++) {
            scanf("%d",&a);
            if(visans[a] == 0) {
                if(vis[a]==0 || vis[a]==1) {
                    ans[cnt++] = a;
                    visans[a] = 1;
                }
            }
        }
        if(cnt == 0) {
            printf("No one is handsome\n");
        }
        else {
            for(int i = 0; i < cnt; i++) {
                if(i == 0) {
                    printf("%05d",ans[i]);
                }
                else {
                    printf(" %05d",ans[i]);
                }
            }
            printf("\n");
        }
    }
    return 0;
}
L1-021 重要的话说三遍

#include <stdio.h>

int main() {
    printf("I'm gonna WIN!\n");
    printf("I'm gonna WIN!\n");
    printf("I'm gonna WIN!\n");
    return 0;
}
L1-022 奇偶分家

#include <stdio.h>

int main() {
    int N,num;
    while(~scanf("%d",&N)) {
        int odd=0,even=0;
        for(int i = 1; i <= N; i++) {
            scanf("%d",&num);
            if(num%2 == 0) {
                even++;
            }
            else {
                odd++;
            }
        }
        printf("%d %d\n",odd,even);
    }
    return 0;
}
L1-023 输出GPLT

#include <stdio.h>
#include <string.h>
char str[10000];
int a[10];
int main() {
    while(~scanf("%s",str)) {
        //1,2,3,4分别用来统计g,p,l,t
        a[1] = a[2] = a[3] = a[4] = 0;
        for(int i = 0; i < (int)strlen(str); i++) {
            if(str[i]=='g' || str[i]=='G') {
                a[1]++;
            }
            else if(str[i]=='p' || str[i]=='P') {
                a[2]++;
            }
            else if(str[i]=='l' || str[i]=='L') {
                a[3]++;
            }
            else if(str[i]=='t' || str[i]=='T') {
                a[4]++;
            }
        }
        int sum = a[1]+a[2]+a[3]+a[4];
        int cnt = 0;
        while(cnt < sum) {
            if(a[1]) {
                printf("G");
                cnt++;
                a[1]--;
            }
            if(a[2]) {
                printf("P");
                cnt++;
                a[2]--;
            }
            if(a[3]) {
                printf("L");
                cnt++;
                a[3]--;
            }
            if(a[4]) {
                printf("T");
                cnt++;
                a[4]--;
            }
        }
        printf("\n");
    }
    return 0;
}
L1-024 后天

#include <stdio.h>
#include <string.h>

int main() {
    int N;
    while(~scanf("%d",&N)) {
        N = N+2;
        N = N%7;
        if(N == 0) {
            printf("7\n");
        }
        else {
            printf("%d\n",N);
        }
    }
    return 0;
}
L1-025 正整数A+B

#include <stdio.h>
#include <string.h>

int isLegal(char str[]) {
    if(str[0] == '-') {
        return -1;
    }
    int num = 0;
    for(int i = 0; i < (int)strlen(str); i++) {
        if(str[i]>='0' && str[i]<='9') {
            num = num*10 + (str[i]-'0');
            if(num>1000) {
                return -1;
            }
        }
        else {
            return -1;
        }
    }
    if(num >= 1)
        return num;
    else
        return -1;
}
int main() {
    char a[100],b[100];
    while(~scanf("%s ",a)) {
        gets(b);
        int A,B;
        A = isLegal(a);
        B = isLegal(b);
        if(A!=-1 && B!=-1) {
            printf("%d + %d = %d\n",A,B,A+B);
        }
        else if(A == -1 && B == -1) {
            printf("? + ? = ?\n");
        }
        else if(A == -1 && B != -1) {
            printf("? + %d = ?\n",B);
        }
        else {
            printf("%d + ? = ?\n",A);
        }
    }
    return 0;
}
L1-026 I Love GPLT

#include <stdio.h>
#include <string.h>

int main() {
    char str[20];
    strcpy(str,"I Love GPLT");
    for(int i = 0; i < (int)strlen(str); i++) {
        printf("%c\n",str[i]);
    }
    return 0;
}
L1-027 出租

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

int arr[12];
int Index[20];
int vis[12];
bool cmp(int a,int b) {
    return a>b;
}
int main() {
    char tel[20];
    while(~scanf("%s",tel)) {
        memset(vis,0,sizeof(vis));
        int cnt = 0,num;
        for(int i = 0; i < (int)strlen(tel); i++) {
            num = tel[i]-'0';
            if(vis[num] == 0) {
                arr[cnt++] = num;
                vis[num] = 1;
            }
        }
        sort(arr,arr+cnt,cmp);
        for(int i = 0; i < cnt; i++) {
            vis[arr[i]] = i;
        }
        for(int i = 0; i < (int)strlen(tel); i++) {
            int num = tel[i]-'0';
            Index[i] = vis[num];
        }
        printf("int[] arr = new int[]{");
        for(int i = 0; i < cnt; i++) {
           if(i != cnt-1) {
                printf("%d,",arr[i]);
           }
           else {
                printf("%d};\n",arr[i]);
           }
        }
        printf("int[] index = new int[]{");
        for(int i = 0; i < 11; i++) {
            if(i != 10) {
                printf("%d,",Index[i]);
            }
            else {
                printf("%d};\n",Index[i]);
            }
        }
    }
    return 0;
}
L1-028 判断素数

#include <stdio.h>
#include <math.h>
bool isPrime(int N) {
    if(N==0 || N==1) {
        return false;
    }
    for(int i = 2; i <= sqrt(N); i++) {
        if(N%i == 0) {
            return false;
        }
    }
    return true;
}
int main() {
    int N,M;
    while(~scanf("%d",&N)) {
        while(N--) {
            scanf("%d",&M);
            if(isPrime(M)) {
                printf("Yes\n");
            }
            else {
                printf("No\n");
            }
        }
    }
    return 0;
}

L1-029 是不是太胖了

#include <stdio.h>

int main() {
    int N;
    while(~scanf("%d",&N)) {
        printf("%.1lf\n",(N-100)*1.8);
    }
    return 0;
}
L1-030 一帮一

#include <stdio.h>
#include <iostream>

using namespace std;

int sex[55];
string name[55];
int main() {
    int N;
    while(~scanf("%d",&N)) {
        for(int i = 1; i <= N; i++) {
            cin>>sex[i]>>name[i];
        }
        for(int i = 1; i <= N/2; i++) {
           for(int j = N; j >= 1; j--) {
                if(sex[j] == 1-sex[i]) {
                    cout<<name[i]<<" "<<name[j]<<endl;
                    sex[j] = 3;
                    break;
                }
           }
        }
    }
    return 0;
}
L1-031 到底是不是太胖了

#include <stdio.h>
#include <iostream>
#include <math.h>

using namespace std;

int main() {
    int N;
    while(~scanf("%d",&N)) {
        double a,b;
        for(int i = 1; i <= N; i++) {
           scanf("%lf%lf",&a,&b);
           a = (a-100)*1.8;
           if(fabs(a-b)*10 < a) {
                printf("You are wan mei!\n");
           }
           else if(a < b) {
                printf("You are tai pang le!\n");
           }
           else if(a > b) {
                printf("You are tai shou le!\n");
           }
        }
    }
    return 0;
}
L1-032 Left-pad

#include <stdio.h>
#include <string.h>

char ch,str[100000];
int main() {
    int N;
    while(~scanf("%d %c ",&N,&ch)) {
        gets(str);
        int len = strlen(str);
        if(len>=N) {
            for(int i = len-N; i < len; i++) {
                printf("%c",str[i]);
            }
            printf("\n");
        }
        else {
            for(int i = 0; i < N-len; i++) {
                printf("%c",ch);
            }
            puts(str);
        }
    }
    return 0;
}
L1-033 出生年

#include <stdio.h>
#include <string.h>

int main() {
    int cnt,year,n,vis[10],temp;
    while(~scanf("%d%d",&year,&n)) {
        for(int i = year; ;i++) {
            memset(vis,0,sizeof(vis));
            cnt = 0;
            temp = i;
            if(temp < 1000) {
                cnt++;
                vis[0] = 1;
            }
            while(temp) {
                if(vis[temp%10] == 0) {
                    vis[temp%10] = 1;
                    cnt++;
                }
                temp = temp/10;
            }
            if(cnt == n) {
                printf("%d %04d\n",i-year,i);
                break;
            }
        }
    }
    return 0;
}
L1-034 点赞

#include <stdio.h>
#include <string.h>

int vis[1005];
int main() {
    int N,M;
    while(~scanf("%d",&N)) {
        memset(vis,0,sizeof(vis));
        int Max=0,ans,a;
        for(int i = 0; i < N; i++) {
            scanf("%d",&M);
            for(int j = 0; j < M; j++) {
                scanf("%d",&a);
                vis[a]++;
                if(vis[a]>Max) {
                    Max = vis[a];
                    ans = a;
                }
                if(vis[a] == Max) {
                    if(a > ans) {
                        ans = a;
                    }
                }
            }
        }
        printf("%d %d\n",ans,Max);
    }
    return 0;
}

L1-035 情人节

#include <iostream>  
#include <stdio.h>  
#include <string.h>  
#include <math.h>  
#include <string>  
#include <set>  
#include <map>  
#include <stack>  
#include <queue>  
#include <algorithm>  
  
using namespace std;  
  
int main()  
{  
    char name1[20],name2[20],str[20];  
    int er = 0,shisi = 0,num = 0;  
    while(scanf("%s",str))  
    {  
        if(strcmp(str,".")==0)  
            break;  
        num++;  
        if(num == 2)  
        {  
            strcpy(name1,str);  
            er = 1;  
        }  
        if(num == 14)  
        {  
            strcpy(name2,str);  
            shisi = 1;  
        }  
    }  
    if(er == 0)  
    {  
        printf("Momo... No one is for you ...\n");  
    }  
    else if(shisi == 0)  
    {  
        printf("%s is the only one for you...\n",name1);  
    }  
    else  
        printf("%s and %s are inviting you to dinner...\n",name1,name2);  
    getchar();  
    return 0;  
}  
L1-036 A乘以B

#include <stdio.h>

int main() {
    int a,b;
    while(~scanf("%d%d",&a,&b)) {
        printf("%d\n",a*b);
    }
    return 0;
}
L1-037 A除以B

#include <stdio.h>

int main() {
    int a,b;
    while(~scanf("%d%d",&a,&b)) {
        if(b == 0) {
            printf("%d/0=Error\n",a);
        }
        else if(b < 0) {
            printf("%d/(%d)=%.2lf\n",a,b,(a*1.0)/b);
        }
        else {
            printf("%d/%d=%.2lf\n",a,b,(a*1.0)/b);
        }
    }
    return 0;
}
L1-038 新世界

#include <stdio.h>

int main() {
    printf("Hello World\n");
    printf("Hello New World");
    return 0;
}
L1-039 古风排版

#include <iostream>  
#include <stdio.h>  
#include <string.h>  
#include <math.h>  
#include <string>  
#include <set>  
#include <map>  
#include <stack>  
#include <queue>  
#include <algorithm>  
//#include<bits/stdc++.h>  
  
using namespace std;  
  
char a[102][102];  
int main()  
{  
    int length,width,num;  ///width存放列数,length用来存放行数  
    char str[1004];  
    while(~scanf("%d",&length))  
    {  
        getchar();  ///接收空字符  
        gets(str);  ///获取字符串,因为字符串中有空格,因此要用gets输入  
        int len = strlen(str);  ///测串长  
        if(len%length == 0)   ///求列宽  
        {  
            width = len/length;  
        }  
        else  
        {  
            width = len/length+1;  
        }  
        num = 0;  ///用来统计当前用的字符个数  
        for(int i = width; i > 0; i--) ///列数从右向左循环  
        {  
            for(int j = 1; j <= length; j++)  ///行数从上向下循环  
            {  
                if(num < len)  ///如果字符串中的字符都没有用完放入矩阵  
                {  
                    a[j][i] = str[num];    
                    num++;  
                }  
                else  ///字符用完了,剩余位置放空字符即可  
                {  
                    a[j][i] = ' ';  
                }  
            }  
        }  
        for(int i = 1; i <= length; i++)  ///输出矩阵  
        {  
            for(int j = 1; j <= width; j++)  
            {  
                printf("%c",a[i][j]);  
            }  
            printf("\n");  
        }  
    }  
    return 0;  
}  

L1-040 最佳情侣身高差

#include <stdio.h>

using namespace std;

int main() {
    int N;
    double h;
    char sex;
    while(~scanf("%d",&N)) {
        while(N--) {
            scanf(" %c %lf",&sex,&h);
            //男性
            if(sex == 'M') {
                printf("%.2lf\n",h/1.09);
            }
            else {
                printf("%.2lf\n",h*1.09);
            }
        }
    }
    return 0;
}
L1-041 寻找250

#include <stdio.h>

using namespace std;

int main() {
    bool flag = false;
    int N,cnt=0;
    while(~scanf("%d",&N)) {
        cnt++;
        if(N == 250 && flag == false) {
            printf("%d\n",cnt);
            flag = true;
        }
    }
    return 0;
}
L1-042 日期格式化

#include <stdio.h>

using namespace std;

char date[20];
void print(int left,int right) {
    for(int i = left; i <= right; i++) {
        printf("%c",date[i]);
    }
}
int main() {
    while(~scanf("%s",date)) {
        print(6,9);
        printf("-");
        print(0,1);
        printf("-");
        print(3,4);
        printf("\n");
    }
    return 0;
}
L1-043 阅览室

#include <stdio.h>
#include <string.h>

using namespace std;

const int maxn = 1002;
int book[maxn];  //book[i]存放书i被借走的时间
int main() {
    int N,id,cnt,sum,hour,minute;
    char ch,time[15];
    memset(book,-1,sizeof(book));
    while(~scanf("%d",&N)) {
        cnt = sum = 0;
        while(N) {
            scanf("%d %c %s",&id,&ch,time);
            if(id == 0) {
                if(cnt == 0) {
                    printf("0 0\n");
                }
                else {
                    double temp = (sum*1.0)/cnt + 0.5;
                    printf("%d %d\n",cnt,(int)temp);
                }
                cnt = sum = 0;
                N--;
                memset(book,-1,sizeof(book));
            } //关门的情况
            else if(ch == 'S') {
                hour = (time[0]-'0')*10 + (time[1]-'0');
                minute = (time[3]-'0')*10 + (time[4]-'0');
                book[id] = hour*60 + minute;
            } //开始借某一本书
            else if(ch == 'E') {
                if(book[id] != -1) {
                    hour = (time[0]-'0')*10 + (time[1]-'0');
                    minute = (time[3]-'0')*10 + (time[4]-'0');
                    sum = sum + (hour*60+minute) - book[id];
                    cnt++;
                    book[id] = -1;
                }
            }
        }
    }
    return 0;
}
L1-044 稳赢

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

int main() {
    map<string,string>m;
    m["ChuiZi"] = "Bu";
    m["Bu"] = "JianDao";
    m["JianDao"] = "ChuiZi";
    int K;
    string str;
    int cnt = 0;
    scanf("%d",&K);
    while(cin>>str) {
        if(str == "End") {
            break;
        }
        if(cnt == K) {
            cout<<str<<endl;
            cnt = 0;
        }
        else {
            cnt++;
            cout<<m[str]<<endl;
        }
    }
}
L1-045 宇宙无敌打招呼

#include <stdio.h>

char str[10];
int main() {
    while(~scanf("%s",str)) {
        printf("Hello ");
        puts(str);
    }
    return 0;
}
L1-046 整除光棍

#include <stdio.h>

int ans[1000];
int main() {
    int N;
    while(~scanf("%d",&N)) {
        int cnt = 0,bit = 0;
        int num = 1;
        while(true) {
            if(cnt || num/N) {
                ans[cnt++] = num/N;
            }
            bit++;
            num = num%N;
            if(num == 0) {
                for(int i = 0; i < cnt; i++) {
                    printf("%d",ans[i]);
                }
                printf(" %d\n",bit);
                break;
            }
            num = num*10 + 1;
        }
    }
    return 0;
}
L1-047 装睡

#include <stdio.h>

int main() {
    int N,a,b;
    char name[100];
    while(~scanf("%d",&N)) {
        while(N--) {
            scanf("%s %d%d",name,&a,&b);
            if(a<15 || a>20 || b<50 || b>70) {
                puts(name);
            }
        }
    }
    return 0;
}
L1-048 矩阵A乘以B

#include <stdio.h>

int A[101][101];
int B[101][101];
int r1,c1,r2,c2,item;
int main() {
    scanf("%d%d",&r1,&c1);
    for(int i = 1; i <= r1; i++) {
        for(int j = 1; j <= c1; j++) {
            scanf("%d",&A[i][j]);
        }
    }
    scanf("%d%d",&r2,&c2);
    for(int i = 1; i <= r2; i++) {
        for(int j = 1; j <= c2; j++) {
            scanf("%d",&B[i][j]);
        }
    }
    if(c1 != r2) {
        printf("Error: %d != %d\n",c1,r2);
    }
    else {
        printf("%d %d\n",r1,c2);
        for(int i = 1; i <= r1; i++) {
            for(int j = 1; j <= c2; j++) {
                item = 0;
                for(int k = 1; k <= c1; k++) {
                    item += A[i][k]*B[k][j];
                }
                if(j != 1) {
                    printf(" ");
                }
                printf("%d",item);
            }
            printf("\n");
        }
    }
    return 0;
}



















































  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值