10.5号新生练习赛题解

来源:互联网 发布:手机拍电影特效软件 编辑:程序博客网 时间:2024/06/05 18:32

第一题:HDU 2022

#include<stdio.h>#include<cstring>#include<cmath>#include<algorithm>//包含abs函数的函数库using namespace std;//命名空间//解释下abs函数,abs函数是取绝对值的函数int main(){    int m,n;    int a[105][105];//第一个维度为行,地问个维度为列    while(~scanf("%d%d",&m,&n))    {        int i,j;        for(i=1; i<=m; i++)        {            for(j=1; j<=n; j++)            {                scanf("%d",&a[i][j]);            }        }        int r=1,c=1,ma=abs(a[1][1]);//r代表分数绝对值最大的妹妹所在的行数,c代表列数,ma代表当前最大的绝对值分数        for(i=1; i<=m; i++)        {            for(j=1; j<=n; j++)            {                if(ma<abs(a[i][j]))//更新最大值                {                    ma=abs(a[i][j]);                    r=i,c=j;                }            }        }        printf("%d %d %d\n",r,c,a[r][c]);    }    return 0;}

第二题:HDU 2024

#include<stdio.h>#include<string.h>#include<ctype.h>#include<cmath>//isalpha函数判断一个字母是不是字母,isalnum函数来判断一个字符是不是字母或数字,包含在ctype.h这个函数库里int main(){    char a[50];    int t;    scanf("%d\n",&t);//这里为什么要敲一个换行符呢,想想    while(t--)    {        gets(a);//gets可以读入空格,而scanf不可以读入空格        if(!isalpha(a[0])&&a[0]!='_')//判断首字符是不是合法        {            printf("no\n");            continue;        }        int flag=1;//一个哨兵变量,来标记这里面是不是出现了不合法的情况        int l=strlen(a);        for(int i=1;i<l;i++)//首字符已判过,不需再判        {            if(a[i]!='_'&&!isalnum(a[i]))//如果一个字符即不是'_'也不是数字或字母,那么它不合法            {                flag=0;//标记为0,直接跳出循环                break;            }            else            {                flag=1;            }        }        if(flag==1)        {            printf("yes\n");        }        else if(flag==0)        {            printf("no\n");        }    }    return 0;}

第三题:HDU 2031

#include <stdio.h>#include <string.h>int main(){    int m,n,r,a[1000],k,flag;//a数组来存转化后的每一位数字,flag用来标记为正数还是负数    while(~scanf("%d%d",&n,&m))    {        k=0;        flag=0;        if(n<0)        {            flag=1;            n=-n;        }        r=n%m;        while(n)//进制转化的方法,高中时学过,也可以上网搜一下        {            if(r<10)                a[k++]=r+48;//小于10的话存的是数字字符            if(r>=10)                a[k++]=r+55;//大于10的话存的是字母字符            n=n/m;            r=n%m;        }        if(flag==1)            printf("-");        for(int i=k-1; i>=0; --i)//把存进去的字符倒着输出            printf("%c",a[i]);        printf("\n");    }    return 0;}

第四题:HDU 2039

#include<stdio.h>int main(){    int t;    float a,b,c;    scanf("%d",&t);    while(t--)    {        scanf("%f%f%f",&a,&b,&c);//注意长度可能是浮点数就好了,原题了        if(a+b>c&&a+c>b&&b+c>a)        {            printf("YES\n");        }        else printf("NO\n");    }    return 0;}

第五题:HDU 2040

#include <stdio.h>int solve(int n)//计算n的真约数之和的函数{    int i,sum = 1;    for (i = 2; i <= n / 2; i++)//至于为什么到n/2就终止了,自己好好想一下        if (n % i == 0)            sum += i;    return sum;//返回值为真约数之和}int main(){    int n,a,b;    scanf("%d",&n);    while(n--)    {        scanf("%d%d",&a,&b);        if(solve(a)==b&&solve(b)==a)//判断亲和数的条件        {            printf("YES\n");        }        else        {            printf("NO\n");        }    }    return 0;}

第六题:HDU 2041

#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int main(){    //通过找规律发现是斐波那契序列,其实可以严格证明的    int n;    int f[45];    f[1]=1;    f[2]=1;    int i;    for(i=3; i<45; i++)    {        f[i]=f[i-1]+f[i-2];    }    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        printf("%d\n",f[n]);    }    return 0;}

第七题:HDU 2074

#include<stdio.h>//自己找下规律,然后根绝条件输出图形。int main(){    int n,i,j,count,flag;    char ch[3];    flag=-1;    while (scanf("%d %c %c",&n,&ch[0],&ch[1])==3)    {        n=n/2;        if(flag!=-1)            printf("\n");        flag=0;        if(n==0)        {            printf("%c\n",ch[0]);            continue;        }        if(n%2==1)        {            ch[2]=ch[0];            ch[0]=ch[1];            ch[1]=ch[2];        }        printf(" ");        for(i=1; i<2*n; i++)            printf("%c",ch[0]);        printf(" \n");        for(i=0; i<2*n-1; i++)        {            if(i<n)                count=i+1;            else                count=2*n-i-1;            ;            for(j=0; j<=2*n; j++)            {                if(j<count)                    printf("%c",ch[j%2]);                else if(2*n-j<count)                    printf("%c",ch[j%2]);                else                    printf("%c",ch[count%2]);            }            printf("\n");        }        printf(" ");        for(i=1; i<2*n; i++)            printf("%c",ch[0]);        printf(" \n");    }    return 0;}

第八题:HDU 2099

#include<stdio.h>//直接暴力枚举后两位是多少就好了,注意下输出的格式int main(){    int i,j,k,sum,n,m,a[101];    while(scanf("%d%d",&n,&m)!=EOF)    {        if(n==0&&m==0)            break;        k=0;        sum=0;        for(i=0; i<100; i++)        {            if(((n*100)+i)%m==0)            {                sum++;                a[k++]=i;            }        }        for(j=0; j<sum; j++)        {            if(j<sum-1)            {                if(a[j]<10)                    printf("0%d ",a[j]);                else                    printf("%d ",a[j]);            }            else            {                if(a[j]<10)                    printf("0%d",a[j]);                else                    printf("%d",a[j]);            }        }        printf("\n");    }    return 0;}
0 0
原创粉丝点击