致初学者(一): 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 ...
随机推荐
- 10.Go-goroutine,waitgroup,互斥锁和channel
10.1.goroutine goroutine的使用 //Learn_Go/main.go package main import ( "fmt" "time" ...
- quick-cocos2dx在eclipse下的lua调试
文中大部分内容来自http://cn.quick-x.com/?p=253,绿色标记部分为修改部分. 配置编译环境的基本步骤: 安装 Visual Studio 2012 安装 Java SDK 安装 ...
- 多态、继承、this、super
先放一下多态的定义: (360词典上的哈) 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie C ...
- springboot整合websocket原生版
目录 HTTP缺点 HTTP websocket区别 websocket原理 使用场景 springboot整合websocket 环境准备 客户端连接 加入战队 微信公众号 主题 HTTP请求用于我 ...
- Arranging Your Team HDU - 3720 【DFS】
思路 题意:此题大意是指首先给你23个队员的信息,包括他们的名字,能力值,在赛场上的职位.然后给出几个若能满足某两个队员同时在球场上就额外加上一定的值.最后让你从23个队员中选出11个人,使得最终的v ...
- springboot+支付宝条码支付开发详解
背景:项目原有乐刷聚合支付,无法参加支付宝.微信等支付机构的官方活动 需求:增加原生支付(支付宝条码支付) 方法: 一.官方文档:https://docs.open.alipay.com/194/10 ...
- (四)Lock,ReentrantLock,ReentrantReadWriteLock类的使用以及相关api---synchronized进阶
这篇博客记录了Lock,ReentrantLock,ReentrantReadWriteLock类的使用以及其一些api: 码字不易~~另外<java多线程编程核心技术>这本书读着很爽 前 ...
- FILEBEAT+ELK日志收集平台搭建流程
filebeat+elk日志收集平台搭建流程 1. 整体简介: 模式:单机 平台:Linux - centos - 7 ELK:elasticsearch.logstash.kiban ...
- Spring入门(十一):Spring AOP使用进阶
在上篇博客中,我们了解了什么是AOP以及在Spring中如何使用AOP,本篇博客继续深入讲解下AOP的高级用法. 1. 声明带参数的切点 假设我们有一个接口CompactDisc和它的实现类Blank ...
- 关于python的特殊方法
最近在阅读<流畅的python>这本书,在第一章中作者就提到了几个python中的特殊方法,代码入下: class FrenchDuck: ranks = [str(n) for n in ...