致初学者(一): 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 ...
随机推荐
- 理解MySQL(一)--MySQL介绍
一.Mysql逻辑架构: 1. 第一层:服务器层的服务,连接\线程处理. 2. 第二层:查询执行引擎,MySQL的核心服务功能,包括查询解析.分析.优化和缓存,所有跨存储引擎的功能都在这一层实现. 3 ...
- python3学习-pickle模块
pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 基本接口: pickle.dump(obj, file, [,protocol]) 注解:将对象obj保存到文件file中 ...
- 用 bat 文件实现 excel 周报复制
又要写周报???? 写周报就算了每次都要改这一大堆的日期,什么鬼嘛,最骚的我还总是有的忘记改.... 作为一个正儿八经的程序员,固定每周某天干重复的一件事,哦~~ 这是机器人 程序应 ...
- 常见Http协议状态码
收集常见的http协议状态码,供查阅!包括中文和英文对照. 中文版 1**:请求收到,继续处理 2**:操作成功收到,分析.接受 3**:完成此请求必须进一步处理 4**:请求包含一个错误语法或不能完 ...
- ASP.NET Core on K8S深入学习(3-2)DaemonSet与Job
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 上一篇<3-1 Deployment>中介绍了Deployment ...
- Go-json解码到结构体-踩坑
package main import ( "encoding/json" "fmt" ) type User struct { Name string `js ...
- C#使用NLOG System.TypeInitializationException,类型初始值设定项引发异常
C#如何使用NLOG,网上有很多介绍,本次使用时遇到一个问题,使用NLOG写日志时,出现初始化异常,基本异常信息如下: System.AggregateException: 发生一个或多个错误. -- ...
- 关于Function和Object之间先后问题的相关研究
文章说明,博主是一个前端小白,本片文章是博主在学习的过程中碰到的疑惑,根据查找的资料,之后得出的个人结论,文中如果出现错误,欢迎指正. -------路漫漫其修远兮吾将上下而求索,与诸君共勉----- ...
- CSS3-------弹簧特效
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Apache和Apache Tomcat
Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP.Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置. Apache是web服 ...