ACM程序设计与竞赛作业 下载本文

内容发布更新时间 : 2024/12/23 0:27:40星期一 下面是文章的全部内容请认真阅读。

printf(\}

心得:这个题目主要运用了动态规划的思想,定义一个二维数组,把所输入的数据存入进去,然后从它的第一行处理,比较相邻位置数的大小,取最小的路径和上一行对应的数相加,取得最小路径,进行循环,直到求出数组中a[1][1],即所求的结果。

3问题 B: 毛毛虫问题 时间限制: 1 Sec 内存限制: 128 MB

提交: 32 解决: 16 [提交][状态][讨论版]

题目描述

Mary在她家门口水平种了一排苹果树,共有N棵。

突然Mary发现在左起第P棵树上(从1开始计数)有一条毛毛虫。为了看到毛毛虫变蝴蝶的过程,Lele在苹果树旁观察了很久。虽然没有看到蝴蝶,但Lele发现了一个规律:每过1分钟,毛毛虫会随机从一棵树爬到相邻的一棵树上。

比如刚开始毛毛虫在第2棵树上,过1分钟后,毛毛虫可能会在第1棵树上或者第3棵树上。如果刚开始时毛毛虫在第1棵树上,过1分钟以后,毛毛虫一定会在第2棵树上。

现在告诉你苹果树的数目N,以及毛毛刚开始所在的位置P,请问,在M分钟后,毛毛虫到达第T棵树,一共有多少种行走方案数。

输入

输入四个整数N P M T。

输出

输出一个整数,就是行走的方案数。

样例输入

7 4 4 4

样例输出

6

#include

void main() {

int i,j; int p,m,n,t;

int a[100][100]={0};//定义一个二维数组; scanf(\

a[0][p]=1;毛毛虫刚开始在数组中的位置; for(i=1;i<=m;i++) {

for(j=1;j<=n;j++)

{

a[i][j]=a[i-1][j-1]+a[i-1][j+1];//每一步的方案数; } }

printf(\分钟后到T棵树行走的方案数; }

心得:这一题运用了动态规划的思想,毛毛虫的每一步都会影响下一步的结果,所以首先按照普通情况找出规律及其其公式,进而算出方案数。首先定义一个二维数组,初始化毛毛虫的起始位置,然后通过两个循环,求出毛毛虫走每一步的方案数,存在二维数组中,然后求出第M分钟到T棵树行走的方案数。

4问题 A: Hamming Problem 时间限制: 1 Sec 内存限制: 128 MB

提交: 61 解决: 23 [提交][状态][讨论版]

题目描述

For each three prime numbers p1, p2 and p3, let's define Hamming sequence Hi(p1, p2, p3), i=1, ... as containing in increasing order all the natural numbers whose only prime divisors are p1, p2 or p3.

For example, H(2, 3, 5) = 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, ...

So H5(2, 3, 5)=6.

输入

In the single line of input file there are space-separated integers p1 p2 p3 i.

输出

The output file must contain the single integer - Hi(p1, p2, p3). All numbers in input and output are less than 10^18.

样例输入

2 3 5 5

样例输出

6

#include \

int minx(int p1,int p2,int p3)// 定义有参函数minx; {

int min=p1; if(p2

}//求p1,p2,p3的最小值; int main() {

int p1,p2,p3,t,i; int a,b,c;

char num[10000];

scanf(\ a=b=c=0; num[0]=1;

for(i=1;i<=t;i++)

{ num[i]=minx(p1*num[a],p2*num[b],p3*num[c]);//调用minx函数;

if(num[i]==p1*num[a]) a++;

if(num[i]==p2*num[b]) b++;

if(num[i]==p3*num[c]) c++;

} 求所有的能被p1,p2,p3整除的数; printf(\ return 0; }

心得:运用动态规划的思想,定义一个一维数组,把所有符合条件的数按顺序存进一维数组中,这个编程运用了函数调用的方法求三个数的最小值,然后把这个最小值存进一维数组中,每次存进一个数,下次都会用存进去的这个数求解下一个数,进行循环。

5问题 B:字符串正反连接 时间限制: 1 Sec 内存限制: 128 MB

提交: 68 解决: 42 [提交][状态][讨论版]

题目描述

所给字符串正序和反序连接,形成新串并输出

输入

任意字符串(长度<=50)

输出

字符串正序和反序连接所成的新字符串

样例输入

123abc

样例输出

123abccba321

#include #include void main() {

char a[50];//定义一个字符串; int i,f;

while(scanf(\实现多行实例输入; {

f=strlen(a);//把字符串的长度值赋给f; for(i=0;i

printf(\把字符串正序输出; }

for(i=f-1;i>=0;i--) {

printf(\把字符串反序输出; }

printf(\} }

心得:定义一个字符串,运用strlen()函数获取字符串的长度值f,首先用for循环,把这个字符串正序输出,然后再用for循环对这个字符串进行反序输出,这里主要考察了输入输出。

6问题 C: 去掉空格

时间限制: 1 Sec 内存限制: 128 MB

提交: 27 解决: 4 [提交][状态][讨论版]

题目描述

读入一些字符串,将其中的空格去掉。

输入

输入为多行,每行为一个字符串,字符串只由字母、数字和空格组成,长度不超过80。输入以“End of file”结束。

输出

对于每行输入,输出转换后的字符串。

样例输入

Hello World 1 2 3

Nice to meet you abc