zoukankan      html  css  js  c++  java
  • code 2287 火车站

    题目描述 Description

    火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定的规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问从x站开出时车上的人数是多少?若无解输出“No answer.”(所有数据均在longint范围内)

    输入描述 Input Description

    a,n,m和x

    输出描述 Output Description

    x站开出时车上的人数

    样例输入 Sample Input

    1 6 7 3

    样例输出 Sample Output

    2

    /*第i站人数为b[i-1]*a+c[i-1]*k
    也就是说m-b[i-1]*a如果可以被c[i-1]整除
    那么第x站的人数为 b[x]*a+c[x]*(m-b[n-1]*a)/(c[n-1])
    否则输出“No answer.” 
    */
    #include<cstdio>
    using namespace std;
    int b[1001]={0,1,1,2},c[1001];
    int main()
    {
    	int a,n,m,x,i;
    	scanf("%d%d%d%d",&a,&n,&m,&x);
    	if(x==1||x==2)
    	{
    		printf("%d",a);
    		return 0;
    	}
    	for(i=4;i<=n;i++)
    	{
    		b[i]=b[i-1]+b[i-2]-1;
    		c[i]=c[i-1]+c[i-2]+1;
    		printf("%d %d
    ",b[i],c[i]);
    	}
    	if((m-b[n-1]*a)%(c[n-1])==0)
    	  printf("%d",b[x]*a+c[x]*(m-b[n-1]*a)/(c[n-1]));
    	else
    	  printf("No answer.");
    	return 0;
    }
    

      

  • 相关阅读:
    开源的Ajax.Net类库
    开放的即时通信协议Jabber
    代码生成工具之MyGeneration
    清华梦的粉碎—写给清华大学的退学申请(牛人 王垠 )
    [.NET网格计算框架] Alchemi
    .net安全类库
    使用Facility:EnterpriseLibrary整合进Castle
    castle project 发布新版本
    10招步骤保护IIS服务器安全
    应用IBatisNet+Castle进行项目的开发
  • 原文地址:https://www.cnblogs.com/jyhywh/p/5559164.html
Copyright © 2011-2022 走看看