文章

10

粉丝

399

获赞

13

访问

96.1k

头像
水杯
P1630 上海交通大学2019年机试题
发布于2020年3月22日 20:29
阅读数 11.4k

这个有点像小学时的数学奥赛题。

个人以为,这个题依然属于该校三个题中的简单题,也就是签到题。

这里我先写了几个if判断,先通过一些case。

核心思想有两个:

1.定义一个大小为c的数组,c可以取的值就是这里的答案,对应的数组值为1;主要还是为了防止有重复值。

2.考虑a,b之间的差值,在b未满时,c可以减少这个差值。这里的逻辑很简单,不妨设更小,先倒入a,再把a倒入b,此时又可以倒入a。

#include<bits/stdc++.h>
using namespace std;
int res (int a,int b,int c){
    int re = 0;

    if(c==0) {return 1;}
	if((a==0&&b)||(a&&b==0)) {return 2;}
	if(a==0&&b==0){return 1;}
    if(c<=a&&c<=b){return 2;}
    bool sum[c+5]={0};

    int d = b/a;
    if(c>=a) sum[c-a] = 1;
    if(c>=b) sum[c-b] = 1;
    if(c>=a+b) sum[c-a-b] = 1;

    for(int i = 2;i<d;i++)
    if(c>=i*a) sum[c-i*a] = 1;
    if(c-d*a-b%a)sum[c-d*a-b%a] = 1;
    if(c-d*a+(a-b%a))sum[c-d*a+(a-b%a)]= 1;
    for(int i = 0;i<c;i++)
    if(sum[i]) re++;
    return re+1;


}
int main(){
    int a,b,c;
	while(cin>>a>>b>>c){

       if(a==b){
	    if(c>a){cout<<3<<endl;}
        els...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发