致初学者(二): HDU 2014~ 2032题解
下面继续给出HDU 2014~2032的AC程序,供大家参考。2014~2032这19道题就被归结为“C语言程序设计练习(三) ”~“C语言程序设计练习(五) ”。
HDU 2014:青年歌手大奖赛_评委会打分
用max保存最高分,min保存最低分,sum表示总分,则最后平均分为(sum-max-min)/(n-2)。
#include <stdio.h>
int main()
{
int n,i,score,min,max,sum;
while (scanf("%d",&n)!=EOF)
{
sum=;
min=;
max=-;
for (i=;i<=n;i++)
{
scanf("%d",&score);
sum+=score;
if (min>score) min=score;
if (max<score) max=score;
}
printf("%.2f\n",1.0*(sum-max-min)/(n-));
}
return ;
}
HDU 2015: 偶数求和
简单循环程序。用变量cnt记录偶数的个数,用sum保存偶数的累加和。
#include <stdio.h>
int main()
{
int n,m,num,cnt,sum,i,first;
while (scanf("%d%d",&n,&m)!=EOF)
{
num=;
sum=;
cnt=;
first=;
for (i=;i<=n;i++)
{
sum+=num;
num+=;
cnt++;
if (cnt==m)
{
if (first!=)
printf(" ");
printf("%d",sum/cnt);
first=;
sum=;
cnt=;
}
}
if (cnt!=)
{
if (first!=) printf(" ");
printf("%d",sum/cnt);
}
printf("\n");
}
return ;
}
HDU 2016: 数据的交换输出
数组的简单应用。
#include <stdio.h>
int main()
{
int n,i,j,t,a[];
while (scanf("%d",&n) && n!=)
{
for (i=;i<n;i++)
scanf("%d",&a[i]);
j=;
for (i=;i<n;i++)
if (a[j]>a[i]) j=i;
t=a[j]; a[j]=a[]; a[]=t;
for (i=;i<n;i++)
{
if (i!=) printf(" ");
printf("%d",a[i]);
}
printf("\n");
}
return ;
}
HDU 2017: 字符串统计
字符串的简单应用。
#include <stdio.h>
int main()
{
int n,i,cnt;
char str[];
scanf("%d",&n);
while (n--)
{
scanf("%s",str);
cnt=;
for (i=;str[i]!='\0';i++)
if (str[i]>='' && str[i]<='')
cnt++;
printf("%d\n",cnt);
}
return ;
}
HDU 2018: 母牛的故事
设f[i]表示第i年母牛的数目,显然可以这样看第i年母牛的数量,第i-1年的所有牛在第i年仍然活着(存在),第i-3年的每头牛(在第i年正好属于第4个年头)在第i年都会产一头小牛,故
f[i]=f[i-1]+f[i-3];
#include <stdio.h>
int main()
{
int n,i;
int f[]={,,,,};
for (i=;i<;i++)
f[i]=f[i-]+f[i-];
while (scanf("%d",&n) && n!=)
{
printf("%d\n",f[n]);
}
return ;
}
HDU 2019: 数列有序!
采用插入排序的思想将m插入到有序的数列中。具体做法是从数列的后面向前面寻找,若当前数比m大,则向后移一个位置;若当前数比m小,退出循环,将m 插在当前数后面即可。
#include <stdio.h>
int main()
{
int n,m,i;
int a[];
while ()
{
scanf("%d%d", &n,&m);
if (n== && m==) break;
for (i=;i<n;i++)
scanf("%d",&a[i]);
for (i=n-;i>= && a[i]>m;i--)
a[i+]=a[i];
a[i+]=m;
for (i=;i<=n;i++)
if (i!=)
printf(" %d",a[i]);
else
printf("%d",a[i]);
printf("\n");
}
return ;
}
HDU 2020: 绝对值排序
采用冒泡排序法将数组A中的各元素按其绝对值从大到小排列。
#include <stdio.h>
#include <math.h>
int main()
{
int n,i,j,t;
int a[];
while (scanf("%d", &n) && n!=)
{
for (i=;i<n;i++)
scanf("%d",&a[i]);
for (i=;i<n-;i++)
for (j=;j<n--i;j++)
if (abs(a[j])<abs(a[j+]))
{
t=a[j]; a[j]=a[j+]; a[j+]=t;
}
for (i=;i<n;i++)
if (i!=)
printf(" %d",a[i]);
else
printf("%d",a[i]);
printf("\n");
}
return ;
}
HDU 2021: 发工资咯:)
简单循环。处理时,先用足100元,剩下再足50元,剩下依次用足10元、5元和2元,最后剩下用1元。
#include <stdio.h>
int main()
{
int n,i,salary,cnt;
while (scanf("%d",&n) && n!=)
{
cnt=;
for (i=;i<=n;i++)
{
scanf("%d",&salary);
cnt+=salary/;
salary%=;
cnt+=salary/;
salary%=;
cnt+=salary/;
salary%=;
cnt+=salary/;
salary%=;
cnt+=salary/;
salary%=;
cnt+=salary;
}
printf("%d\n",cnt);
}
return ;
}
HDU 2022: 海选女主角
简单二维数组的输入,求各元素绝对值最大的元素及其位置。
#include <stdio.h>
#include <math.h>
int main()
{
int m,n,i,j,maxi,maxj,max;
int a[][];
while (scanf("%d%d",&m,&n) !=EOF)
{
for (i=;i<m;i++)
for (j=;j<n;j++)
scanf("%d",&a[i][j]);
max=a[][]; maxi=; maxj=;
for (i=;i<m;i++)
for (j=;j<n;j++)
if (abs(max)<abs(a[i][j]))
{
max=a[i][j]; maxi=i; maxj=j;
}
printf("%d %d %d\n",maxi+,maxj+,max);
}
return ;
}
HDU 2023: 求平均成绩
学习二维数组的输入和遍历方法。定义 int score[50][5]保存学生的各门课程成绩,
double stu[50]保存各学生的平均成绩, double course[5] 保存各课程的平均成绩。
#include <stdio.h>
int main()
{
int n,m,score[][],i,j,sum,cnt,flag;
double stu[],course[];
while (scanf("%d%d",&n,&m)!=EOF)
{
for (i=;i<n;i++) // 输入n个学生的成绩并计算每个学生的平均成绩
{
sum=;
for (j=;j<m;j++)
{
scanf("%d",&score[i][j]);
sum+=score[i][j];
}
stu[i]=1.0*sum/m;
}
for (i=;i<n;i++) // 输出n个学生的平均成绩
{
if (i!=) printf(" ");
printf("%.2lf",stu[i]);
}
printf("\n");
for (j=;j<m;j++) // 计算m门课程的平均成绩
{
sum=;
for (i=;i<n;i++)
sum+=score[i][j];
course[j]=1.0*sum/n;
}
for (i=;i<m;i++) // 输出m门课程的平均成绩
{
if (i!=) printf(" ");
printf("%.2lf",course[i]);
}
printf("\n");
cnt=;
for (i=;i<n;i++) // 统计各科成绩均大于等于平均成绩的学生数量
{
flag=;
for (j=;j<m;j++)
if (1.0*score[i][j]<course[j])
{
flag=; break;
}
if (flag==) cnt++;
}
printf("%d\n\n",cnt);
}
return ;
}
HDU 2024: C语言合法标识符
简单字符串处理。C语言合法标识符规则是:标识符是由大小写英文字母、数字以及下划线(_)所构成的字符序列,第一个字符不能是数字。
#include <stdio.h>
#include <string.h>
bool isLegalChar(char ch)
{
if (ch>='' && ch<='')
return true;
if (ch>='A' && ch<='Z')
return true;
if (ch>='a' && ch<='z')
return true;
if (ch=='_')
return true;
return false;
}
int main()
{
int n,i,flag;
char str[];
scanf("%d",&n);
getchar();
while (n--)
{
gets(str);
flag=;
for (i=;str[i]!='\0';i++)
{
if (i== && str[i]>='' && str[i]<='')
{
flag=; break;
}
if (!isLegalChar(str[i]))
{
flag=; break;
}
}
if (flag==)
printf("yes\n");
else
printf("no\n");
}
return ;
}
HDU 2025: 查找最大元素
字符串简单应用。
#include <stdio.h>
int main()
{
char str[],max;
int i;
while (scanf("%s",str)!=EOF)
{
max=str[];
for (i=;str[i]!='\0';i++)
{
if (max<str[i])
max=str[i];
}
for (i=;str[i]!='\0';i++)
{
printf("%c",str[i]);
if (str[i]==max)
printf("(max)");
}
printf("\n");
}
return ;
}
HDU 2026: 首字母变大写
简单字符串处理。通过空格确定是否为下一个单词,将单词的首字母小写变大写(ASCII值减32即可)。
#include <stdio.h>
#include <string.h>
int main()
{
int i,flag;
char str[];
while (gets(str))
{
flag=; // 需小写改大写
for (i=;str[i]!='\0';i++)
{
if (flag== && str[i]>='a' && str[i]<='z')
{
printf("%c",str[i]-);
flag=;
}
else if (str[i]==' ')
{
printf("%c",str[i]);
flag=;
}
else
printf("%c",str[i]);
}
printf("\n");
}
return ;
}
HDU 2027: 统计元音
简单字符串处理。
#include <stdio.h>
#include <string.h>
int main()
{
int n,i,num1,num2,num3,num4,num5;
char str[];
scanf("%d",&n);
getchar();
while (n--)
{
gets(str);
num1=num2=num3=num4=num5=;
for (i=;str[i]!='\0';i++)
{
switch (str[i])
{
case 'a': num1++; break;
case 'e': num2++; break;
case 'i': num3++; break;
case 'o': num4++; break;
case 'u': num5++; break;
}
}
printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n",num1,num2,num3,num4,num5);
if (n>) printf("\n");
}
return ;
}
HDU 2028: Lowest Common Multiple Plus
将求整数x和y的最小公倍数抽象为一个函数,函数原型为:int lcm(int x,int y);
#include <stdio.h>
int lcm(int x,int y)
{
int t1,t2,r;
t1=x;
t2=y;
while (t1%t2!=)
{
r=t1%t2;
t1=t2;
t2=r;
}
return x/t2*y;
}
int main()
{
int n,i,x,y;
while (scanf("%d",&n) !=EOF)
{
y=;
for (i=;i<=n;i++)
{
scanf("%d",&x);
y=lcm(x,y);
}
printf("%d\n",y);
}
return ;
}
HDU 2029: Palindromes _easy version
字符串str是否为“回文”的判断。采用类双指针的方法,下标i指向左端(初始值为0),j指向右端(初始值为strlen(str)-1),比较str[i]和str[j],如果两者不相等,则str肯定不是回文,退出循环比较;如果两者相等,则i++向右走,j--向左走,直到两个指针相遇或交错,此时可确定str是回文。
#include <stdio.h>
#include <string.h>
int main()
{
int n,i,j;
char str[];
scanf("%d",&n);
while (n--)
{
scanf("%s",str);
for (i=,j=strlen(str)-;i<j;i++,j--)
{
if (str[i]!=str[j]) break;
}
if (i<j)
printf("no\n");
else
printf("yes\n");
}
return ;
}
HDU 2030: 汉字统计
简单字符串处理。汉字机内码采用2个字节保存,且每个字节的最高位为1,检测字符串中每个字节的最高位即可,用位运算 (str[i] & 0x80) !=0 表示 str[i]最高位为1。
#include <stdio.h>
#include <string.h>
int main()
{
int n,i,cnt;
char str[];
scanf("%d",&n);
getchar();
while (n--)
{
gets(str);
cnt=;
for (i=;str[i]!='\0';i++)
{
if ((str[i] & 0x80)!=) cnt++;
}
printf("%d\n",cnt/);
}
return ;
}
HDU 2031: 进制转换
十进制数转换成R进制数的方法是:将十进制整数不断除以R,记下余数,直到商为0,将所得的余数逆序排列就是对应的R进制数。采用字符串数组
char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 来保存R进制的各数码。
#include <stdio.h>
#include <string.h>
int main()
{
char b[]={'','','','','','','','','','','A','B','C','D','E','F'};
int c[],n,base,i;
while (scanf("%d%d",&n,&base)!=EOF)
{
i=;
if (n<)
{
printf("-");
n=-n;
}
do
{
c[i]=n % base;
i++;
n=n/base;
} while(n!=);
for(--i;i>=;--i)
printf("%c",b[c[i]]);
printf("\n");
}
return ;
}
HDU 2032: 杨辉三角
可以采用二维数组来保存杨辉三角的各项。
#include <stdio.h>
int main()
{
int n,i,j,y[][]={};
for (i=;i<=;i++)
y[i][]=y[i][i]=;
for (i=;i<=;i++)
for (j=;j<i;j++)
y[i][j]=y[i-][j-]+y[i-][j];
while (scanf("%d",&n)!=EOF)
{
for (i=;i<=n;i++)
{
for (j=;j<=i;j++)
{
if (j!=) printf(" ");
printf("%d",y[i][j]);
}
printf("\n");
}
printf("\n");
}
return ;
}
也可以采用一维数组来保存杨辉三角的最后一行的各项,这样边求下一行边输出。
#include <stdio.h>
#include <string.h>
int main()
{
int y[],row,col,n;
while (scanf("%d",&n)!=EOF)
{
memset(y,,sizeof(y)); // 数组元素初始化为0
y[]=;
printf("%d\n",y[]);
for (row=;row<n;row++)
{
for (col=row;col>=;col--)
y[col]=y[col]+y[col -];
for (col=;col<=row;col++)
{
if (col!=) printf(" ");
printf("%d",y[col]);
}
printf("\n");
}
printf("\n");
}
return ;
}
致初学者(二): HDU 2014~ 2032题解的更多相关文章
- 致初学者(一): HDU 2000~ 2013题解
对于开始学习C语言程序设计或C++程序设计面向过程部分的同学来说,利用在线OJ网站进行实践训练,对提高自己的编程能力很有好处.国内外OJ网站很多,每个都去看看,去刷个题,是不现实的,也没必要.即使一个 ...
- 致初学者(四):HDU 2044~2050 递推专项习题解
所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果.其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定.关于递推的知识可以参阅本博客中随笔“递推 ...
- 致初学者(三): HDU 2033~ 2043题解
下面继续给出HDU 2033~2043的AC程序,供大家参考.2033~2043这10道题就被归结为“ACM程序设计期末考试(2006/06/07) ”和“2005实验班短学期考试 ”. HDU 20 ...
- 快速傅里叶变换应用之二 hdu 4609 3-idiots
快速傅里叶变化有不同的应用场景,hdu4609就比较有意思.题目要求是给n个线段,随机从中选取三个,组成三角形的概率. 初始实在没发现这个怎么和FFT联系起来,后来看了下别人的题解才突然想起来:组合计 ...
- 爆零后的感受外加一道强联通分量HDU 4635的题解
今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句””,弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly ...
- HDU 2014 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2014 题目大意:给你 n 个数,去掉 max 和 min ,求平均数 解题思路: 很水,边记录分数,边 ...
- HDU 5963 朋友 题解
题目 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双 ...
- Google Code Jam 2014 Qualification 题解
拿下 ABD, 顺利晋级, 预赛的时候C没有仔细想,推荐C题,一个非常不错的构造题目! A Magic Trick 简单的题目来取得集合的交并 1: #include <iostream> ...
- NOI 2014简要题解
Day 1.Problem A. 起床困难综合症 100分做法: 把数字看成二进制数.对于初始攻击力.我们将其拆成32位,并求出每一位为0和1时经过全部防御门之后分别得到的数字.然后就是按位贪心了,我 ...
随机推荐
- Promise 学习心得
当了这么久码农到今天没事才开始去深究 Promise 这个对象 什么是 Promise, Promise 有什么用? 在写代码的时候多多少少都有遇见过地狱式的回调 代码看起来没问题就是有点乱,Prom ...
- 算法与数据结构基础 - 字典树(Trie)
Trie基础 Trie字典树又叫前缀树(prefix tree),用以较快速地进行单词或前缀查询,Trie节点结构如下: //208. Implement Trie (Prefix Tree)clas ...
- android——SQLite数据库存储(创建)
Android 专门提供了SQLiteOpenHelper帮助类,借助这个类就可以非常简单的对数据库进行创建和升级. 首先SQLiteOpenHelper是一个抽象类,在使用的时候需要创建一个自己的帮 ...
- [Spring cloud 一步步实现广告系统] 17. 根据流量类型查询广告
广告检索服务 功能介绍 媒体方(手机APP打开的展示广告,走在路上看到的大屏幕广告等等) 请求数据对象实现 从上图我们可以看出,在媒体方向我们的广告检索系统发起请求的时候,请求中会有很多的请求参数信息 ...
- javaScript基础-0 javascript概述
一.简介 javaScript一种面向web的编程语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早 ...
- C#串口类封装 SuperSerialPort
C#串口类封装 SuperSerialPort 基于SerialPort类做了简单的封装方便调用 代码 /// <summary> /// SuperSerialPort /// < ...
- 维恩贝特面试JAVA后台开发
1 自我介绍 2 链表和数组区别(数组空间连续,且有下标,查找快,但是增删数据效率不高,链表的空间不连续,查找起来慢,但是对数据的增删效率高,链表可以随意扩大,数组不能) 3 sort方法的实现 (A ...
- Docker进阶-容器监控cAdvisor+InfluxDB+Granfana
概述 前面文章介绍使用docker compose组合应用并利用scale快速对容器进行扩容. 由于docker compose启动的服务都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的 ...
- mysql数据库的水平拆分与垂直拆分
近端时间在面试,发现很多面试官或者面试都把数据的水平拆分合垂直拆分给搞混了,今天特意写了一篇博客来说说水平拆分和垂直拆分希望对程序猿们有所帮助. 数据库水平与垂直拆分: 垂直(纵向)拆分:是指按功能模 ...
- 在Docker for Windows中运行GUI程序
Docker运行GUI原理 Docker目前大多应用在服务器领域,那么在Docker中可以运行GUI程序吗?怀着好奇心google了一番,还真有人写了一篇文章 running-gui-applicat ...