姓名:凃讼林
用时:1小时30分钟
第一题
源代码
#include<stdio.h>
intx,y,m,n,L;
intmain(){
int i;
scanf("%d%d%d%d%d",&x,&y,&m,&n,&L);
int Djump = n-m;
if(Djump==0){/*由于规定了x不等于y,所以两只青蛙的跳跃长度一样就不可能相遇*/
printf("impossible");
return 0;
}
while(Djump<0)
Djump+=L;
int Dorigin = x - y;
while(Dorigin<0)
Dorigin+=L;
printf("%d\n",Dorigin/Djump);
return 0;
}
第二题
源代码
#include<stdio.h>
intA(int n);
intn;
intnum[26];
intmain(){
int i;
int result[0x7fff];
memset(result,0,sizeof(result));
int count = 0;
scanf("%d",&n);
while(n!=0){
memset(num,0,sizeof(num));
for(i = 0; i < n; i++)
scanf("%d",&num[i]);
int s = 1;
int sum = 0;
for(i = 0; num[i]!=0; i++){
sum+=num[i];
s *= A(num[i]);
}
result[count++]=A(sum)/s;
scanf("%d",&n);
}
for(i = 0; i < count;i++)
printf("%d\n",result[i]);
return 0;
}
intA(int n){
int i = 0;
int s = 1;
for(i = 1; i <= n; i++)
s*=i;
return s;
}
第三题
源代码
#include <stdio.h>
#define UNIT 50
int m[3];
int f(int n, int t);
int main(){
m[2] = 7;
m[1] = 4;
m[0] = 3;
int i;
int n;
int count = 0;
scanf("%d",&n);
int *result = (int*)malloc(sizeof(int)*n);
for(i = 0; i < n; i++)
result[i] = 0;
for(i = 0; i < n; i++){
int input;
scanf("%d",&input);
int alwaysTip = input % UNIT;
input = (input-alwaysTip)/50;
result[count++] = f(3,input) * UNIT + alwaysTip;
}
for(i = 0; i < count; i++)
printf("%d\n",result[i]);
free(result);
return 0;
}
int f(int n, int t){
if(n==0)
return t;
if(t==3||t==4||t==7)
return 0;
if(t-m[n-1]<0)
return f(n-1,t);
else{
int useLast = f(n,t-m[n-1]);
int notUseLast = f(n-1,t);
return (useLast<notUseLast)?useLast:notUseLast;
}
}