左嘉


私信TA

用户名:zuojia

访问量:88573

签 名:

Jz

等  级
排  名 5
经  验 34534
参赛次数 226
文章发表 72
年  龄 40
在职情况 在职
学  校 北京理工大学
专  业

  自我简介:

解题思路:
从第二站开始,就需要知道上车人数,由题目得知:第二站一定有人上下车,由于上一站上了a个人,那么第二站最多下车人数是a,由于第二站的下车人数与上车人数相等,那么第二站上车人数的范围应该在1到a之间,后续每一站上下车的人数都可递推得出,同时记录车开走时车上的人数,若到第n站时人数等于m,递推成功,输出结果。

注意事项:
车从最后一站开走时,人全都下车后,车上人数为0。

参考代码:

#include<stdio.h>
#include<stdlib.h>
int main(){
	int i,a,n,m,x,s,*sc,*xc,*r;
	scanf("%d%d%d%d",&a,&n,&m,&x);
	sc=(int *)malloc((n+1)*sizeof(int));
	xc=(int *)malloc((n+1)*sizeof(int));
	r=(int *)malloc((n+1)*sizeof(int));
	sc[1]=a;//第一站上车人数
	xc[1]=0;//第一站下车人数
	r[1]=a; //从第一站开走时车上人数
	for(sc[2]=1;sc[2]<=a;sc[2]++){//从1到a假设第二站上车人数
		s=a;
		xc[2]=sc[2];//第二站下车人数
		s+=sc[2];
		s-=xc[2];
		r[2]=s;//从第二站开走时车上人数
		for(i=3;i<n;i++){
			sc[i]=sc[i-1]+sc[i-2];//第i站上车人数
			xc[i]=sc[i-1];//第i站下车人数
			s+=sc[i];
			s-=xc[i];
			r[i]=s;//从第i站开走时车上人数
		}
		r[i]=0;
		if(s==m) break;//到第n站时车上人数是否为m
	}
	printf("%d\n",r[x]);
	if(NULL!=sc) free(sc);
	if(NULL!=xc) free(xc);
	if(NULL!=r) free(r);
	return 0;
}
 

0.0分

0 人评分

  评论区

  • «
  • »