hdu2011 多项式求和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int m,n;
double sum=0.0,f=1.0;
scanf("%d",&m);
while(m--) {
scanf("%d",&n);
sum=0.0,f=1.0;
for(int i=1;i<=n;i++) {
sum+=f/i;
f=-1.0*f;
}
printf("%.2f\n",sum);
}
return 0;
}

hud2012 素数判定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
#include<iostream>
#include<cmath>
using namespace std;
int cal(int a)
{
return a*a+a+41;
}
int su(int b)
{
for(int i=2;i<=(int)sqrt(b);i++) {
if(b%i==0) return 0;
}
return 1;
}
int main()
{
int x,y,flag=1;
while(scanf("%d%d",&x,&y)&&(x||y)) {
flag=1;
for(int i=x;i<=y;i++)
if(su(cal(i))==0) flag=0;
if(flag==1) printf("OK\n");
else printf("Sorry\n");
}
return 0;
}

hdu2013 蟠桃记

  这是一道非常经典的OI明星题,原名是《猴子吃桃》,我在2008年初二的时候第一次接触这道题目,也是因为这一道题爱上了算法。这道题目是非常经典的循环题,类似的题目还有《王小二切大饼》、《母牛问题》等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,sum=0;
while(scanf("%d",&n)!=EOF) {
sum=1;
for(int i=1;i<n;i++) {
sum=2*(sum+1);
}
printf("%d\n",sum);
}
return 0;
}

hdu2014 青年歌手大赛_评委会打分

  这是一道日常生活中常见的题目,唯一需要注意的就是在使用sort()函数时,需要排序的范围,这里还请大家思考一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define N 110
using namespace std;
int li[N];
int main()
{
int n;
double p;
while(scanf("%d",&n)!=EOF) {
p=0.0;
memset(li,0,sizeof(li));
for(int i=1;i<=n;i++) {
scanf("%d",&li[i]);
}
sort(li+1,li+n+1);
for(int i=2;i<n;i++) {
p+=li[i];
}
printf("%.2f\n",p/(n-2));
}
return 0;
}

hdu2015 偶数求和

  这道题算是这几道里面比较麻烦的了,开始想的可能比较复杂,取第几项加几什么的很烦。但是后来发现,按照题目的意思直接去计算可能比较简单。

  首先,我们的思路是算出每组数的第一个数2+(m2)\i,然后向后求和,去平均值。最后要判断一下最后一组是否完全,不全的话则需要除以n%m求平均值。

  除此之外,还有输出的循环控制,最后一个元素的后面没有空格。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF) {
int sum=0,a=2,flag=0,i;
for(i=1;i<=n;i++) {
sum+=a;
a+=2;
if(i%m==0) {
flag++;
if(flag!=1)
printf(" ");
printf("%d",sum/m);
sum=0;
}
}
if(n%m==0)
printf("\n");
else
printf(" %d\n",sum/(n%m));
}
return 0;
}

hdu2016 数据的交换输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,a[110],mi;
while(scanf("%d",&n)&&n) {
mi=1;
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
if(a[i]<a[mi]) {
mi=i;
}
}
int t;
t=a[mi];
a[mi]=a[1];
a[1]=t;
printf("%d",a[1]);
for(int i=2;i<=n;i++) {
printf(" %d",a[i]);
}
printf("\n");
}
return 0;
}

hdu2017 字符串统计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,sum;
scanf("%d",&n);
getchar();
while(n--) {
char s;
int sum=0;
while((s=getchar())!='\n') {
if(s>=48&&s<=57) sum++;
}
printf("%d\n",sum);
}
return 0;
}

hdu2018 母牛的故事

  这是一道简单的动态规划问题,这类问题的其他内容我们将在后来的教程中着重讨论。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<cstdio>
#include<iostream>
using namespace std;
int func(int y)
{
if(y<4) return y;
else return func(y-3)+func(y-1);
}
int main()
{
int n;
while(scanf("%d",&n)&&n) {
printf("%d\n",func(n));
}
return 0;
}

hdu2019 数列有序!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<cstdio>
#include<iostream>
#include<cstring>
#define N 110
int a[N];
using namespace std;
int main()
{
int n,m,ji=0;
while(scanf("%d%d",&n,&m)&&(n||m)) {
memset(a,0,sizeof(a));
ji=1;
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++) {
if(a[i]>=m) {
ji=i;
break;
}
}
for(int i=n+1;i>ji;i--) {
a[i]=a[i-1];
}
a[ji]=m;
printf("%d",a[1]);
for(int i=2;i<=n+1;i++) {
printf(" %d",a[i]);
}
printf("\n");
}
return 0;
}

hdu2020 绝对值排序

`C++