9/17 越努力越幸运-思维赛(3.0) 解题思路
Posted xiao20000605
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9/17 越努力越幸运-思维赛(3.0) 解题思路相关的知识,希望对你有一定的参考价值。
A
题意:给4个数,它们为3个数其中两两相加之和和三个数相加之和,求这三个
解题思路:先找出所给的4个数的最大值,然后用最大值从后面分别减去另外三个数输出的就是所求的三个数
#include<stdio.h> #include<math.h> #include<string.h> int main() int a,b,c,d,max=0,x[4],i; while(~scanf("%d%d%d%d",&a,&b,&c,&d)) x[0]=a;x[1]=b;x[2]=c;x[3]=d; for(i=0;i<4;i++) if(x[i]>max) max=x[i]; if(max==a) printf("%d %d %d\n",max-d,max-c,max-b); else if(max==b) printf("%d %d %d\n",max-d,max-c,max-a); if(max==c) printf("%d %d %d\n",max-d,max-b,max-a); if(max==d) printf("%d %d %d\n",max-c,max-b,max-a); return 0;
B
题意:给一组数据,将其中的数+d或者-d或者不变然后都变为相同的数,如果能输出这个数,如果不能输出-1
解题思路:找出数组中的最大值和最小值,然后看a[i]是否等于(minn+maxx)/2
1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 int main() 5 6 int n,a[110],b[110],i,min,max,x; 7 while(~scanf("%d",&n)) 8 9 for(i=0;i<n;i++) 10 scanf("%d",&a[i]); 11 12 min=a[0]; 13 max=a[0]; 14 for(i=0;i<n;i++) 15 16 if(a[i]<min) 17 min=a[i]; 18 if(a[i]>max) 19 max=a[i]; 20 21 int flag=1; 22 for(i=0;i<n;i++) 23 24 if(a[i]==min||a[i]==max) 25 26 continue; 27 28 else 29 if(a[i]!=min&&a[i]!=max&&a[i]==(max+min)/2&&(max+min)%2==0) 30 x=(max-min)/2; 31 else 32 33 flag=2; 34 printf("-1\n"); 35 break; 36 37 38 if(flag==1) 39 40 if(min%2==0&&max%2==0) 41 x=(max-min)/2; 42 else if(min%2!=0&&max%2!=0) 43 x=(max-min)/2; 44 else 45 x=max-min; 46 printf("%d\n",x); 47 48 49 return 0; 50
C
题意:一只猫每周的每一天吃的东西都不一样,现在给出每一样东西能吃的天数,求不间断的从周几开始吃能吃的最大天数
解题思路:找出能吃最少天数的食物,然后依次进行循环判断,记录下从开始到结束的天数
#include<stdio.h> #include<math.h> #include<iostream> #include<algorithm> using namespace std; int main() int k,i,a,b,c,m,n,p,minn; while(cin>>a>>b>>c) m=a/3; n=b/2; p=c/2; minn=m; minn=min(minn,n); minn=min(minn,p); int sum=7*minn; m=a-minn*3; n=b-minn*2; p=c-minn*2; int j=7; int x[101]=0; while(j--) i=j+1; k=0; a=m; b=n; c=p; for(;i<=7;i++) if(i==1||i==4||i==7) if(a==0) break; a--; k++; x[j]=k; if(i==2||i==6) if(b==0) break; b--; k++; x[j]=k; if(i==3||i==5) if(c==0) break; c--; k++; x[j]=k; if(i==7) i=0; sort(x,x+7); cout<<sum+x[6]<<endl;
D
题意:有两种电池能用与白天和晚上,白天用b电池能充电变为a电池,求所有的电池能用的最大天数
解题思路:先判断是白天还是晚上,然后决定用什么电池,依次进行判断直到结束
#include<stdio.h> #include<math.h> #include<iostream> #include<algorithm> using namespace std; int main() int n,b,a,i,x[200010],count=0,p,q; while(cin>>n>>b>>a) p=a;q=b; for(i=0;i<n;i++) cin>>x[i]; for(i=0;i<n;i++) if(x[i]==0) if(a>=1) a--; count++; else b--; count++; else if(a==p) if(a>=1) a--; count++; else b--; a++; count++; else if(b>=1) b--; a++; count++; else a--; count++; if(a==0&&b==0) break; cout<<count<<endl; return 0;
以上是关于9/17 越努力越幸运-思维赛(3.0) 解题思路的主要内容,如果未能解决你的问题,请参考以下文章