对于开始学习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. MySQL储存过程详解

    我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的 ...

  2. 简单设计企业级JOB平台

    前言 在企业级项目中有许多能够用到定时任务的场景例如: 在某个时间点统一给某些用户发送邮件信息 接口表数据发送 某月某日更新报表数据 ...... 目前我们使用SpringBoot快速整合Quartz ...

  3. js及jquery常用代码

    1.获取屏幕尺寸 document.documentElement.scrollWidth; document.documentElement.scrollHeight; $(window).widt ...

  4. Go调度器介绍和容易忽视的问题

    本文记录了本人对Golang调度器的理解和跟踪调度器的方法,特别是一个容易忽略的goroutine执行顺序问题,看了很多篇Golang调度器的文章都没提到这个点,分享出来一起学习,欢迎交流指正. 什么 ...

  5. 重学计算机组成原理(十)- "烫烫烫"乱码的由来

    程序 = 算法 + 数据结构 对应到计算机的组成原理(硬件层面) 算法 --- 各种计算机指令 数据结构 --- 二进制数据 计算机用0/1组成的二进制,来表示所有信息 程序指令用到的机器码,是使用二 ...

  6. python学习之路(2)---字符编码

    二进制编码 bin(300)    python计算二进制编码,十进制转2进制 一个二进制位就是1bit 1bit代表了8个字节,00001111 1bit  = 1bytes   缩写1b 1kb ...

  7. MySQL基础(用的贼鸡儿多)

    整理有点乱,业余也玩玩系统,经常碰见这些玩意,有点烦,老是记不住 MySQL 基础语法 一.连接 MYSQL格式: mysql -h 主机地址 -u 用户名 -p 用户密码. 1.连接到本机上的 MY ...

  8. odoo视图中常用widget

    widget="statusbar" 头部状态条标签 widget="email" 电子邮件地址标签 widget="selection" ...

  9. 百度地图api之----根据用户ip定位城市

    LocalCity 这个类是利用用户IP地址去百度数据库里查询得到IP所在的城市,用法如下: var objCity = new BMap.LocalCity(); objCity.get(funct ...

  10. c++ 开发JNI

    c++ 开发JNI C的预处理命令 #开头的就是c/c++的预处理命令 在编译之前 先会走预编译阶段 预编译阶段的作用就是 把 include进来的头文件 copy到源文件中 define这些宏定义 ...