9/17 越努力越幸运-思维赛(3.0) 解题思路

A

题意:给4个数,它们为3个数其中两两相加之和和三个数相加之和,求这三个

解题思路:先找出所给的4个数的最大值,然后用最大值从后面分别减去另外三个数输出的就是所求的三个数

9/17 越努力越幸运-思维赛(3.0) 解题思路
#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

9/17 越努力越幸运-思维赛(3.0) 解题思路
 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

题意:一只猫每周的每一天吃的东西都不一样,现在给出每一样东西能吃的天数,求不间断的从周几开始吃能吃的最大天数

解题思路:找出能吃最少天数的食物,然后依次进行循环判断,记录下从开始到结束的天数

9/17 越努力越幸运-思维赛(3.0) 解题思路
#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电池,求所有的电池能用的最大天数

解题思路:先判断是白天还是晚上,然后决定用什么电池,依次进行判断直到结束

9/17 越努力越幸运-思维赛(3.0) 解题思路
#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

 

上一篇:noi.ac #240 tree


下一篇:单调队列——POJ - 2823