前言
本篇文章对我做到的题中有巧妙部分的进行讲解,每个题目下面有对应链接,题目来自于牛客网,没有账号的老铁,需要注册一个。
`
一、判断两个数的大小
请大家先读题,自己尝试写代码,进行思考。
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 )
二、最高分与最低分之差
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
拜拜了!