文章
10
粉丝
399
获赞
14
访问
100.7k
这个有点像小学时的数学奥赛题。
个人以为,这个题依然属于该校三个题中的简单题,也就是签到题。
这里我先写了几个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...
登录后发布评论
暂无评论,来抢沙发