两小道题目的分享


前言

本篇文章对我做到的题中有巧妙部分的进行讲解,每个题目下面有对应链接,题目来自于牛客网,没有账号的老铁,需要注册一个。


`

一、判断两个数的大小

链接:BC49-判断两个数的大小

请大家先读题,自己尝试写代码,进行思考。

1.我的代码:

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

2.题目要求及我的解决方案:

1.首先,题目要求多组输入,且每组有两个数;

简单了解scanf函数的返回值:
scanf函数返回值为int型。

int a,b;
scanf("%d %d",&a,&b);

若a,b两数字均正常输入,返回2;
若只有a正常输入,返回1;
简单来说就是,它返回已成功赋值的数据项数。
出错时则返回EOF(end of file).
请添加图片描述
实际上EOF就是-1;

办法一:while(scanf(“%d %d”,&a,&b)==2)

int main()
{
int a,b;
char c;
while(scanf("%d %d",&a,&b)==2)
{
	    if(a>b)
        c='>';
        else if(a==b)
        c='=';
        else
        c='<';
        printf("%d%c%d\n",a,c,b);
}
return 0;
}

方法二:while(scanf(“%d”,&n) != EOF)
!=
此方法不建议使用,有bug;如果正常输入了两组数的一个,仍然进入循环。
如果输入一个数,便可以。

方法三:while(~scanf(“%d”,&n))
若错误输入scanf返回EOF
~EOF==0,
不建议:
如果正确输入,两个数,scanf返回2
~2是0.循环结束,产生问题。

综上:
此处使用第一种最好:
while(scanf(“%d %d”,&a,&b)==2 )

二、最高分与最低分之差

链接:BC95-最高分与最低分之差

1.我的代码

#include <stdio.h>
int main() 
{
    int n,input;
    int max=0;
    int min=100;
    int i=0;
    int arr[10000]={-1};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d ",&input);
        arr[i]=input;
    }
    for(i=0;i<n;i++)
    {
        if(arr[i]>max)
        max=arr[i];
        else
        ;
    }
        for(i=0;i<n;i++)
    {
        if(arr[i]>min)
        ;
        else
        min=arr[i];
    }
    printf("%d",max-min);
    return 0;
}

2.题目要求及我的解决方案

1,成绩范围为0-100,巧妙给max,min赋初值

int max=0; 如果max的值过大,底下就不能成功比较出成绩最大值。
例如:让max初始值为100.肯定所有的成绩都不能超过,且同时成绩中没有考100分的,就会产生错误的最大值。

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

        if(arr[i]>max)
        max=arr[i];
        else
        ;
    }

int min=100;
尝试思考为什么是这样?

        for(i=0;i<n;i++)
    {
        if(arr[i]>min)
        ;
        else
        min=arr[i];
    }

总结

在进行学习的同时,也要进行编程题目的练习。一些推荐,难度有差异,随后出一篇,难度排行。
链接:牛客网
链接: lintcode

链接:leetcode

拜拜了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值