第一阶段杭电OJ英文题试水 答案详解 (1720、1062、2104、1064、2734、1170、1197、2629 )

1720

#include<stdio.h>
int main()
{
    int a,b;
    while(scanf("%x%x",&a,&b)!=EOF) //输入16进制数
    {
        printf("%d\n",a+b); //将16进制数转换为10进制数
    }
    return 0;
}

1062

#include<stdio.h>
#include<string.h>
int main()
{
    int n,a,i,j,k;
    char c[1005];
    scanf("%d",&n);
    {
        getchar();  //要加getchar吸收空格
        while(n--)  //n行测试数据
        {
            gets(c); //输入一行数据
            a=strlen(c);  //测出每组数据的长度,这个不包括\0
            for(i=0;i<=a;i++)        //对每一行数据遍历一遍
            {
                if(c[i]==' '||i==a)   //如果遇到空格或者到达末尾处,k为上一个单词的位置
                {
                    for(j=i-1;j!=k&&j>=0;j--)  //对前面的单词进行反向输出
                    putchar(c[j]);   //注意这里为c[j]
                    k=i;               //记录上一个输出单词的末尾位置
                    if(i!=a) putchar(' ');
                }
            }
        printf("\n");
        }
    }
    return 0;
}

2104

/*该题大意为每间隔M次开箱找一次手帕,
如有A,B,C三个箱子,间隔M等于2,首先
看B箱,那下一次看A箱,再看C箱,此时
确定能够找到手帕,因为三个箱子全都看过

此题要求N,M互质,否则当M为N的因数时,
一直重复循环,才能遍历每一个盒子,此题我采用辗转相除法*/
#include<stdio.h>
int main()
{
    int n,m,i;
    while(scanf("%d%d",&n,&m))
    {
        i=1;
        if(n==-1&&m==-1)
            break;
        while(i!=0)
        {
            i=n%m;
            n=m;
            m=i;
        }
        if(n==1) printf("YES\n");
        else     printf("POOR Haha\n");
    }
    return 0;
}

1064

求平均值之后输出美元符号加平均值,注意数据类型
#include<stdio.h>
int main()
{
    float c[12],aver,sum=0;
    int i;
    for(i=0;i<12;i++)
    {
        scanf("%f",&c[i]);
        sum=sum+c[i];
    }
    aver=sum/12;
    printf("$%.2f\n",aver);
    return 0;
}

2734
此题是计算每个字母的位置序号乘以本身代表的数的大小
如ACM: 11 + 23 + 313 = 46
MID CENTRAL: 1
13 + 29 + 34 + 40 + 53 + 65 + 714 + 820 + 918 + 101 + 1112 = 650
空格占一个位置但本身为零

#include<stdio.h>
#include<string.h>
int main()
{
    char ch[300];
    int sum,a,i;
    while((gets(ch)&&ch[0]!='#'))
    {
        sum=0;
        a=strlen(ch);
        for(i=0;i<a;i++)
        {
                if(ch[i]!=' ')
                sum=sum+(ch[i]-64)*(i+1);  //当ch[i]!=空格时,求和的公式
        }
        printf("%d\n",sum);
    }
    return 0;
}

1170

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    int a,b;
    char c;
    scanf("%d",&n);
    while(n--)
    {
        getchar(); //吸收换行符
        
        scanf("%c %d %d",&c,&a,&b);
        if(c=='*') printf("%d\n",a*b);
        if(c=='+') printf("%d\n",a+b);
        if(c=='-') printf("%d\n",a-b);
        if(c=='/')
        {
            if(a%b==0) printf("%d\n",a/b);
            else
                printf("%.2lf\n",(double)a/b);
        }
    }
    return 0;
}

1197
数字2991具有(十进制)数字之和2 + 9 + 9 + 1 = 21.由于2991 = 1 * 1728 + 8 * 144 + 9 * 12 + 3,其十二进制表示为1893(12)
即以10进制表示和以12进制表示、16进制表示的每一位数的和相等

#include<stdio.h>
int main()
{
    int i,sum,sum1,sum2;
    for(i=2091;i<9999;i++)
    {
        sum=i/1000+i%1000/100+i%100/10+i%10;
        sum1=i/1728+i%1728/144+i%144/12+i%12;
        sum2=i/4096+i%4096/256+i%256/16+i%16;

    if(sum1==sum&&sum2==sum)
        printf("%d\n",i);
    }
    return 0;
}

2629
暴力AC

#include<stdio.h>
int main()
{
    char s[20];
    int n;
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        gets(s);
        printf("He/She is from ");
        if(s[0]=='3'&&s[1]=='3') printf("Zhejiang");
        if(s[0]=='1'&&s[1]=='1') printf("Beijing");
        if(s[0]=='7'&&s[1]=='1') printf("Taiwan");
        if(s[0]=='8'&&s[1]=='1') printf("Hong Kong");
        if(s[0]=='8'&&s[1]=='2') printf("Macao");
        if(s[0]=='5'&&s[1]=='4') printf("Tibet");
        if(s[0]=='2'&&s[1]=='1') printf("Liaoning");
        if(s[0]=='3'&&s[1]=='1') printf("Shanghai");
        printf(",and his/her birthday is on ");
        printf("%c%c,%c%c,%c%c%c%c",s[10],s[11],s[12],s[13],s[6],s[7],s[8],s[9]);
        printf(" based on the table.\n");
    }
    return 0;
}

发布了28 篇原创文章 · 获赞 7 · 访问量 1185

猜你喜欢

转载自blog.csdn.net/weixin_44433678/article/details/95616920
今日推荐