致初学者(一): HDU 2000~ 2013题解
对于开始学习C语言程序设计或C++程序设计面向过程部分的同学来说,利用在线OJ网站进行实践训练,对提高自己的编程能力很有好处。国内外OJ网站很多,每个都去看看,去刷个题,是不现实的,也没必要。即使一个OJ网站,上面3~4千道题也难全部刷完。因此,给大家推荐两个OJ网站。一个是北京大学的PKU JudgeOnline(http://poj.org/),简称POJ;另一个是杭州电子科技大学的HDU Online Judge System (http://acm.hdu.edu.cn/),简称 HDU。将这两个网站结合起来用于程序设计的训练是有帮助的。
POJ上面有3千多道题,绝大部分是英文题目,显得高大上些;HDU上有近6千道题,有部分中文题目,比POJ接地气些。这两个OJ网站上的题目编排顺序不是按难易程度,也不是按专题(HDU稍微好些,有时还有些专题集锦的小概念)。因此,对初学者而言,究竟找哪些题刷是个问题。题目难了,无从下手,伤信心和兴趣,老刷简单的,对提高作用就不大了。有时逛网络,又经常发现一些文章这水题一枚,那水题又一枚,自己拿来一看,又不一定是那回事。作为一个程序设计初学者,你就是一小学生,有那么一嘚瑟的大学生跟你讲微积分简单,一元二次方程不值得提,道理一样。别过多在意别人的说法,自己根据自己的水平,找到适合自己做的事就好了。
有鉴于此,我整理了一个随笔专题:致初学者。主要想帮助初学者在POJ和HDU上找到合适的题目训练。大牛们别笑话,路过好了。
我们先看HDU。HDU 题目集第11卷中Pro.ID号为2000~2099这100道题中85%是中文题目,题意理解起来不存在语言障碍。并且这100道题本身被归结为一些小专题,比如2000~2032这33道题就被归结为“C语言程序设计练习(一) ”~“C语言程序设计练习(五) ”,对于初学者作为习题进行训练恰到好处。下面我以题解的形式先给出这100道题的AC程序,供大家参考。
HDU 2000: ASCII码排序
简单的分支选择结构。输入a,b,c三个字母,比较交换a和b,使a比b小;比较交换a和c,使a比c小;这样a就是最小的字母了;最后比较交换b和c,使b比c小。
#include <stdio.h>
int main()
{
char c1,c2,c3,temp;
while (scanf("%c%c%c",&c1,&c2,&c3)!=EOF)
{
if (c1>c2)
{
temp=c1; c1=c2; c2=temp;
}
if (c1>c3)
{
temp=c1; c1=c3; c3=temp;
}
if (c2>c3)
{
temp=c2; c2=c3; c3=temp;
}
printf("%c %c %c\n",c1,c2,c3);
getchar();
}
return ;
}
HDU 2001:计算两点间的距离
简单公式计算。已知两点坐标(x1,y1)和(x2,y2),两点距离公式为sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))。
#include <stdio.h>
#include <math.h>
int main()
{
double x1,x2,y1,y2,dis;
while (scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)!=EOF)
{
dis=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
printf("%.2lf\n",dis);
}
return ;
}
HDU 2002:2002 计算球体积
简单公式计算题。已知半径r,球的体积计算公式为:V=4/3*PI*r3。
#include <stdio.h>
#define PI 3.1415927
int main()
{
double r,v;
while (scanf("%lf",&r)!=EOF)
{
v=4.0/*PI*r*r*r;
printf("%.3lf\n",v);
}
return ;
}
HDU 2003: 求绝对值
简单选择结构 if (x<0) x=-x;
#include <stdio.h>
int main()
{
double x;
while (scanf("%lf",&x)!=EOF)
{
if (x<)
x=-x;
printf("%.2lf\n",x);
}
return ;
}
HDU 2004:成绩转换
多分支嵌套 if …else if ……
#include <stdio.h>
int main()
{
int score;
while (scanf("%d",&score)!=EOF)
{
if (score< || score>)
printf("Score is error!\n");
else if (score<)
printf("E\n");
else if (score<)
printf("D\n");
else if (score<)
printf("C\n");
else if (score<)
printf("B\n");
else
printf("A\n");
}
return ;
}
HDU 2005:第几天?
switch …case …结构的灵活使用。
#include <stdio.h>
int main()
{
int year,month,day,d;
while (scanf("%d/%d/%d",&year,&month,&day)!=EOF)
{
d=;
switch(month-)
{
case :d+=;
case :d+=;
case :d+=;
case :d+=;
case :d+=;
case :d+=;
case :d+=;
case :d+=;
case :d+=;
case :d+=;
if (year%== && year%!= || year%==) d++;
case :d+=;
}
d=d+day;
printf("%d\n",d);
}
return ;
}
或数组的应用。
#include <stdio.h>
int main()
{
int table[]={,,,,,,,,,,,,};
int year,month,day,d,i;
while (scanf("%d/%d/%d",&year,&month,&day)!=EOF)
{
d=;
for (i=;i<=month-;i++)
d+=table[i];
if (month> && (year%== && year%!= || year%==))
d++;
d=d+day;
printf("%d\n",d);
}
return ;
}
HDU 2006:求奇数的乘积
简单循环结构。
#include <stdio.h>
int main()
{
int n,x,p,i;
while (scanf("%d",&n)!=EOF)
{
p=;
for (i=;i<=n;i++)
{
scanf("%d",&x);
if (x%)
p*=x;
}
printf("%d\n",p);
}
return ;
}
HDU 2007:平方和与立方和
简单循环结构。
#include <stdio.h>
int main()
{
int x,y,i,t,sum1,sum2;
while (scanf("%d%d",&x,&y)!=EOF)
{
if (x>y)
{
t=x; x=y; y=t;
}
sum1=sum2=;
for (i=x;i<=y;i++)
{
if (i%)
sum2+=i*i*i;
else
sum1+=i*i;
}
printf("%d %d\n",sum1,sum2);
}
return ;
}
HDU 2008:数值统计
循环体中用选择结构分别统计大于0、等于0和小于0的数的个数。
#include <stdio.h>
int main()
{
int n,i,a,b,c;
double x;
while (scanf("%d",&n) && n!=)
{
a=b=c=;
for (i=;i<=n;i++)
{
scanf("%lf",&x);
if (x>)
c++;
else if (x<)
a++;
else
b++;
}
printf("%d %d %d\n",a,b,c);
}
return ;
}
HDU 2009:求数列的和
简单循环结构。
#include <stdio.h>
#include <math.h>
int main()
{
int n,m,i;
double x,sum;
while (scanf("%d%d",&n,&m)!=EOF)
{
x=1.0*n;
sum=0.0;
for (i=;i<=m;i++)
{
sum+=x;
x=sqrt(x);
}
printf("%.2lf\n",sum);
}
return ;
}
HDU 2010:水仙花数
简单循环结构。设a,b,c分别表示3位数x的百位、十位和个位,则
a=x/100 ; b=x%100/10; c=x%10;
#include <stdio.h>
#include <math.h>
int main()
{
int n,m,i,a,b,c,cnt;
while (scanf("%d%d",&m,&n)!=EOF)
{
cnt=;
for (i=m;i<=n;i++)
{
a=i/;
b=i%/;
c=i%;
if (i==a*a*a+b*b*b+c*c*c)
{
cnt++;
if (cnt!=)
printf(" ");
printf("%d",i);
}
}
if (cnt==)
printf("no\n");
else
printf("\n");
}
return ;
}
HDU 2011:多项式求和
简单循环结构。为进行奇数项相加,偶数项相减的切换。定义变量flag,初始值为1,之后每循环一次后flag=-flag,即 1,-1,1,-1,1,-1,…,从而实现加减的切换。
#include <stdio.h>
#include <math.h>
int main()
{
int n,m,i,flag;
double sum;
scanf("%d",&m);
while (m--)
{
sum=0.0;
flag=;
scanf("%d",&n);
for (i=;i<=n;i++)
{
sum+=flag*1.0/i;
flag=-flag;
}
printf("%.2lf\n",sum);
}
return ;
}
HDU 2012:素数判定
将素数的判定抽象为一个函数。原型为: bool isPrime(int x);
#include <stdio.h>
#include <math.h>
bool isPrime(int x)
{
int i,n;
n=(int)sqrt(1.0*x);
for (i=;i<=n;i++)
if (x%i==) return false;
return true;
}
int main()
{
int x,y,i,cnt;
while ()
{
scanf("%d%d",&x,&y);
if (x== && y==) break;
cnt=;
for (i=x;i<=y;i++)
{
if (isPrime(i*i+i+))
cnt++;
}
if (cnt==y-x+)
printf("OK\n");
else
printf("Sorry\n");
}
return ;
}
HDU 2013:蟠桃记
简单循环迭代计算。迭代式为 num=2*(num+1); 迭代初值num=1。
#include <stdio.h>
int main()
{
int n,day,num;
while (scanf("%d",&n)!=EOF)
{
num=;
for (day=n-;day>=;day--)
{
num=*(num+);
}
printf("%d\n",num);
}
return ;
}
致初学者(一): HDU 2000~ 2013题解的更多相关文章
- HDU 2000 ASCII码排序
题目链接:HDU 2000 Description 输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符. Input 输入数据有多组,每组占一行,有三个字符组成,之间无空格. Outp ...
- 致初学者(四):HDU 2044~2050 递推专项习题解
所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果.其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定.关于递推的知识可以参阅本博客中随笔“递推 ...
- 致初学者(二): HDU 2014~ 2032题解
下面继续给出HDU 2014~2032的AC程序,供大家参考.2014~2032这19道题就被归结为“C语言程序设计练习(三) ”~“C语言程序设计练习(五) ”. HDU 2014:青年歌手大奖赛_ ...
- 致初学者(三): HDU 2033~ 2043题解
下面继续给出HDU 2033~2043的AC程序,供大家参考.2033~2043这10道题就被归结为“ACM程序设计期末考试(2006/06/07) ”和“2005实验班短学期考试 ”. HDU 20 ...
- hdu 4764 && 2013长春网赛题解
一个组合游戏题. 解答: 从后面往前面推,首先n-1是必胜位,然后前面的k位是必败位,如此循环下去.所以题目就容易了! 代码: #include<cstdio> using namespa ...
- HDU 2000 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2000 题目大意:仨字符从小到大排序 解题思路: 很水很水,需要注意的地方是如果用苦力(三个if)要注意 ...
- hdu 4751 2013南京赛区网络赛 二分图判断 **
和以前做过的一个二分图颇为相似,以前的是互相不认识的放在一组,这个是互相认识的,本质上是相同的 是 hdu 2444 #include<cstdio> #include<iostre ...
- HDU 1106 排序 题解
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- 爆零后的感受外加一道强联通分量HDU 4635的题解
今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句””,弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly ...
随机推荐
- Windows下的bat原来可以为我们做很多
用了windows系统这么多年了,对bat也不是很了解.最近研究了一下bat的用法.这里就大概列举一下自己的用法 参考网址 基本命令 echo echo我们可以理解成程序中的输出,和我们Java的Sy ...
- 史上最全面 Android逆向培训之__Xposed使用
刚招来个Android,干了半个月辞职了,他走之后,成堆的bug被测了出来,都是这个新人代码都没看懂就开始改的一塌糊涂,还给提交了.实在是让人头疼,清理了一个月多月才把他半个月写的bug清理个差不多. ...
- mysql注意事项
注意事项: 1.查询条件内需要使用时间的,不要使用数据库函数now(),都使用应用服务器传入: 2.所有id为mysql自增的,需要使用创建时间排序,都使用order by id desc;或者根据查 ...
- 《机器学习技法》---AdaBoost算法
1 AdaBoost的推导 首先,直接给出AdaBoost算法的核心思想是:在原数据集上经过取样,来生成不同的弱分类器,最终再把这些弱分类器聚合起来. 关键问题有如下几个: (1)取样怎样用数学方式表 ...
- Salesforce LWC学习(四) 父子component交互 / component声明周期管理 / 事件处理
我们在上篇介绍了 @track / @api的区别.在父子 component中,针对api类型的变量,如果声明以后就只允许在parent修改,son component修改便会导致报错. sonIt ...
- Windows Server 2008配置系统安全策略
下面学习Windows Server 2008配置系统安全策略 在工作组中的计算机本地安全策略有 用户策略,密码策略,密码过期默认42天 服务账户设置成永不过期,帐户锁定策略,本地策略,审核策略,计算 ...
- java 计算器
初识java:利用swing制作一个简单的计算器,仿造window10内置计算器标准模式下的界面. 涉及学习内容: 设置窗口 设计界面按键 设置文本框:只读 String字符串操作:与double类型 ...
- 数据算法 --hadoop/spark数据处理技巧 --(13.朴素贝叶斯 14.情感分析)
十三.朴素贝叶斯 朴素贝叶斯是一个线性分类器.处理数值数据时,最好使用聚类技术(eg:K均值)和k-近邻方法,不过对于名字.符号.电子邮件和文本的分类,则最好使用概率方法,朴素贝叶斯就可以.在某些情况 ...
- nodejs简单抓包工具
就是简简单单写程序的我为什么需要抓包? 其实在平时写demo的时候需要用到一些图片和文本的资源的,但是需求量比较大,这个时候就想去网站上面直接复制啊,然后图片另存为啊,什么的一系列繁琐的操作. 但是现 ...
- 2015-11-17 linux基础笔记
21. 可执行权限不代表能够执行,这得看文件内容 22. 还是可以用适当的拓展名表示该文件是什么种类的*.sh 脚本或批处理文件 *Z.*.tar.*.tar.gz.*.zip.*.tgz 压缩文件 ...