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 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