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;
View Code

 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 
View Code

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;
    
View Code

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;
View Code

 

以上是关于9/17 越努力越幸运-思维赛(3.0) 解题思路的主要内容,如果未能解决你的问题,请参考以下文章

为何同资本家比起来,普通人越努力反而越没钱?

越努力越幸运--2-LD_PRELOAD, fork ,僵尸进程

越努力,越幸运

越努力越幸运 —— 51CTO PMP百日备考记

越努力越幸运 —— 51CTO PMP百日备考记

越努力越幸运