新生练习赛 10.2 题解

题目链接:http://vjudge.net/contest/134839#overview
密码:000000
新生们不要光看题解,要弄懂为什么?
静下心了慢慢想,本题解仅供参考

国庆假期练习赛2
第一题:多组A+B
第二题:奇数和偶数的判定 并求其平方和和立方和
第三题:整数 负数 和零 个数的统计
第四题:找最小数 并与第一个数交换后输出
第五题:简单递归的应用(很多同学都在问递归,不妨下节课以这个题为基础讲下)
第六题:数组的简单应用与数据统计
第七题:简单的数据查找并按一定格式输出
第八题:三角形的判断

第一题:HDU1090

#include<stdio.h>

int main()
{
    int t;
    scanf("%d",&t);//输入t,代表有t组数据
    while(t--)
    {
        int a,b;
        scanf("%d%d",&a,&b);//输入两个整数a和b
        printf("%d\n",a+b);//输出a和b的和
    }
    return 0;
}

第二题:HDU2007

#include<stdio.h>

int main()
{
    int n,m;//n,m代表这个区间的始末位置,另外坑点在n,m的大小不确定
    while(~scanf("%d%d",&n,&m))
    {
        if(n>m)//如果n比m大,要交换下,因为下面需要用到for循环
        {
            int temp=n;
            n=m;
            m=temp;
        }
        int x=0,y=0;//x代表偶数的平方和,y代表奇数的立方和
        for(int i=n;i<=m;i++)//在for循环里定义变量在C语言中不允许,希望以后注意把文件的后缀从.c改为.cpp 提交代码时选择G++或者C++
        {
            if(i%2==0)//如果i是偶数
            {
                x+=i*i;
            }
            else//如果i是奇数
            {
                y+=i*i*i;
            }
        }
        printf("%d %d\n",x,y);//把最终的结果按格式输出
    }
    return 0;
}

第三题:HDU2008

#include<stdio.h>

int main()
{
    int n;//给定一个n,代表接下来要输入n个数
    while(~scanf("%d",&n))
    {
        if(n==0)//如果n==0 输入结束
        {
            break;
        }
        int sum1=0,sum2=0,sum3=0;//sum1代表正数的个数,sum2代表0的个数,sum3代表负数的个数
        for(int i=0;i<n;i++)//在for循环里定义变量在C语言中不允许,希望以后注意把文件的后缀从.c改为.cpp 提交代码时选择G++或者C++
        {
            double num;
            scanf("%lf",&num);
            if(num>0)//num为正数
            {
                sum1++;
            }
            else if(num==0)//num为0
            {
                sum2++;
            }
            else//num为负数的时候
            {
                sum3++;
            }
        }
        printf("%d %d %d\n",sum3,sum2,sum1);//注意让输出的格式
    }
    return 0;
}

第四题:HDU 2016

#include<stdio.h>

int main()
{
    int n;//n代表每组数据的个数
    while(~scanf("%d",&n))
    {
        if(n==0)//n==0时代表输入结束
        {
            break;
        }
        int a[105],x=0,minn=10000000;//定义一个数组来存数,x代表最小的数的位置,minn代表当前最大的数,为什么初始化为那么大的数,可以仔细思考下,这是技巧
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]<minn)//更新最小数并记录最小数的位置
            {
                minn=a[i];
                x=i;
            }
        }
        int temp=a[x];//交换最小数和第一个数
        a[x]=a[0];
        a[0]=temp;
        printf("%d",a[0]);//这是输出的格式,同样是技巧,需要掌握。
        for(int i=1;i<n;i++)
        {
            printf(" %d",a[i]);
        }
        printf("\n");
    }
    return 0;
}

第五题:HDU 2018
第一种解法:

#include <stdio.h>

int main()
{
    int n, i;
    int f[55] = {1, 2, 3, 4, 6};//遇到这样的题,你可以手动找下规律,然后本题的规律也是可以经过严格证明得到的,在此就不证明了。

    for (i = 5 ; i < 55 ; i++)//你会发现以下规律,提前打好表,然后后面直接输出就好了
        f[i] = f[i - 1] + f[i - 3];

    while(~scanf("%d", &n))
    {
        if(n==0)//n==0的时候代表输入结束
        {
            break;
        }
        printf("%d\n", f[n - 1]);//为什么是n-1呢?因为数组是从0开始存的。
    }
    return 0;
}

第二种解法:

#include<stdio.h>

int f(int n)//递归的实现方法,自己可以试着模拟以下过程。看不懂不要紧,以后慢慢就懂了
{
    if(n==1)
        return 1;
    else if(n==2)
        return 2;
    else if(n==3)
        return 3;
    else return f(n-1)+f(n-3);//这个也是通过找规律找出来的。
}

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        if (n==0) break;
        printf("%d\n",f(n));
    }
    return 0;
}

第六题:HDU 2023

#include<stdio.h>
#include<string.h>//memset函数在此函数库中

int main()
{
    double a[105][105];//两个维度,第一个代表第几个学生。第一个维度代表第几门课,a[i][j]代表第i名学生的第j门课的成绩
    double b[105],c[105];//b[i]代表第i个学生的这m门课的平均成绩,c[i]代表第i门课的所有同学的平均成绩
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        memset(b,0,sizeof(b));//对b和c两个数组进行初始化
        memset(c,0,sizeof(c));
        int i,j;
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=m; j++)
            {
                scanf("%lf",&a[i][j]);
                b[i]=b[i]+a[i][j];
            }
            b[i]=b[i]/m;//求每名同学的m科的平均成绩
        }
        for(j=1; j<=m; j++)
        {
            for(i=1; i<=n; i++)
            {
                c[j]=c[j]+a[i][j];
            }
            c[j]=c[j]/n;//求某一科的所有同学的平均成绩
        }
        int s=0,sum=0;//sum表示表示该班级中各科成绩均大于等于平均成绩的学生数量
        for(i=1; i<=n; i++)
        {
            s=0;//记录第i个学生m门课中有几门达到了该课的平均成绩
            for(j=1; j<=m; j++)
            {
                if(a[i][j]>=c[j])
                {
                    s++;
                }
            }
            if(s==m)//如果这m门课都达到了平均成绩
            {
                sum++;
            }
        }
        printf("%.2lf",b[1]);
        for(i=2; i<=n; i++)
        {
            printf(" %.2lf",b[i]);
        }
        printf("\n");
        printf("%.2lf",c[1]);
        for(i=2; i<=m; i++)
        {
            printf(" %.2lf",c[i]);
        }
        printf("\n");
        printf("%d\n\n",sum);
    }
    return 0;
}

第七题:HDU 2025

#include<stdio.h>
#include<string.h>//计算字符串长度需要用到的头文件

int main()
{
    char a[105];
    while(~scanf("%s",a))//输入一个字符串
    {
        int l;
        char c=a[0];//先认为第一个元素是最大的,后面会更新
        l=strlen(a);//计算字符串的长度
        for(int i=0;i<l;i++)
        {
            if(c<a[i])//更新最大元素。用c存
            {
                c=a[i];
            }
        }
        for(int i=0;i<l;i++)
        {
            if(c==a[i])//如果某个元素是最大元素的输出格式
            {
                printf("%c(max)",a[i]);
            }
            else printf("%c",a[i]);
        }
        printf("\n");
    }
    return 0;
}

第八题:HDU 2039

#include<stdio.h>

int main()
{
    int t;//共有t组数据
    double a,b,c;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lf%lf%lf",&a,&b,&c);//每个三角形的三条边的长度
        if(a+b>c&&a+c>b&&b+c>a)//判断三角形的条件
        {
            printf("YES\n");
        }
        else printf("NO\n");
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值