对于开始学习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题解的更多相关文章

  1. HDU 2000 ASCII码排序

    题目链接:HDU 2000 Description 输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符. Input 输入数据有多组,每组占一行,有三个字符组成,之间无空格. Outp ...

  2. 致初学者(四):HDU 2044~2050 递推专项习题解

    所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果.其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定.关于递推的知识可以参阅本博客中随笔“递推 ...

  3. 致初学者(二): HDU 2014~ 2032题解

    下面继续给出HDU 2014~2032的AC程序,供大家参考.2014~2032这19道题就被归结为“C语言程序设计练习(三) ”~“C语言程序设计练习(五) ”. HDU 2014:青年歌手大奖赛_ ...

  4. 致初学者(三): HDU 2033~ 2043题解

    下面继续给出HDU 2033~2043的AC程序,供大家参考.2033~2043这10道题就被归结为“ACM程序设计期末考试(2006/06/07) ”和“2005实验班短学期考试 ”. HDU 20 ...

  5. hdu 4764 && 2013长春网赛题解

    一个组合游戏题. 解答: 从后面往前面推,首先n-1是必胜位,然后前面的k位是必败位,如此循环下去.所以题目就容易了! 代码: #include<cstdio> using namespa ...

  6. HDU 2000 (水)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2000 题目大意:仨字符从小到大排序 解题思路: 很水很水,需要注意的地方是如果用苦力(三个if)要注意 ...

  7. hdu 4751 2013南京赛区网络赛 二分图判断 **

    和以前做过的一个二分图颇为相似,以前的是互相不认识的放在一组,这个是互相认识的,本质上是相同的 是 hdu 2444 #include<cstdio> #include<iostre ...

  8. HDU 1106 排序 题解

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  9. 爆零后的感受外加一道强联通分量HDU 4635的题解

    今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句””,弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly ...

随机推荐

  1. [zz] pomelo windows 环境下开发环境搭建

    原文链接:http://nodejs.netease.com/topic/515279a0b5a2705b5a000983 本文主要介绍下 windows 下跑通 pomelo 简单例子的过程 开发前 ...

  2. 统计学习方法—SVM推导

    目录 SVM 1. 定义 1.1 函数间隔和几何间隔 1.2 间隔最大化 2. 线性可分SVM 2.1 对偶问题 2.2 序列最小最优算法(SMO) 3. 线性不可分SVM 3.1 松弛变量 3.2 ...

  3. 解决微信二次分享失败--后面被加上from=singlemessage&isappinstalled=0的解决方案

    首次分享成功,点开后再次分享或第三次分享就失败了 1.检查你分享的链接,看是否多了两个参数,微信分享会根据分享的不同,为原始链接拼接: 朋友圈   from=timeline&isappins ...

  4. 如何让textarea placeholder 文字垂直居中

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. SQL TRUNCATE TABLE 命令

    SQL TRUNCATE TABLE 命令 SQL TRUNCATE TABLE 命令用于删除现有数据表中的所有数据. 你也可以使用 DROP TABLE 命令来删除整个数据表,不过 DROP TAB ...

  6. 如何用Python实现敏感词的过滤

    题目要求如下: 从文件解析敏感词,从终端获取用户输入.根据敏感词对用户输入进行过滤.这里过滤需要考虑不止一个过滤词:即将读取的所有过滤词,放进一个列表,用屏蔽词检索用户输入,如果有屏蔽词,则将其替换为 ...

  7. .net测试篇之测试神器Autofixture在几个复杂场景下的使用示例以及与Moq结合

    系列目录 为String指定一个值. 在第三节里我们讲了如何使用自定义配置加上一个自定义算法生成一个自定义字符串,然而有些时候我们仅仅是需要某个字段是有意义的,这个时候随便生成的字符串也满足不了我们的 ...

  8. 集成 Spring Boot 常用组件的后台快速开发框架 spring-boot-plus 国

    spring-boot-plus是一套集成spring boot常用开发组件的后台快速开发框架 Purpose 每个人都可以独立.快速.高效地开发项目! Everyone can develop pr ...

  9. 八皇后非递归(仅使用一个数组且可扩展为N皇后问题)

    </pre><pre name="code" class="cpp">/* Theme:八皇后(非递归) Coder:秒针的声音 Tim ...

  10. 关于ionic app $http.get()无法请求,导致页面没有数据的问题

    ionic app 打包后在真机上运行,无法用正常使用http.get(),这种情况被称为“白名单”,解决方法:切换到项目根目录,执行命令:cordova plugin add cordova-plu ...