中国石油大学第二题 Have a Nice Day

这道题首先要读懂题意:

1:日期中每次数字出现的次数相等,

2:日期分割成四个部分,Year分成两个部分。这四个数字存在总和相等的两部分。(2,2与1,3)。

附上代码:思路很清楚,算法很朴素。

#include <iostream>
#include<string.h>
#include<stdio.h>
#include <algorithm>
using namespace std;
int a[4];
void qsort(int a[], int n)
{
    for(int i = 1; i<=n-1; i++)
    {
        int k = i-1;
        for(int j = i; j<n; j++)
        {
            if(a[j]<a[k])
                k = j;
            if(k != (i-1))
            swap(a[i-1],a[k]);
        }
    }
}
int main()
{
   int n;
   cin>>n;
   while(n>0)
   {
        int d,m,y;
        cin>>d>>m>>y;
        int y1,y2;
        y1 = y/100;
        y2 = y%100;
        a[0] = d;a[1]= m;a[2] = y1;a[3] = y2;
        qsort(a, 4);
       if(!(a[0]+a[3] == a[1]+a[2] || a[1]+a[0]+a[2]== a[3]))
         {
            cout<<"no"<<endl;
            n--;
            continue;
         }

         int sw[8],w[11];
      //   memset(sw, 10, sizeof(sw));
         memset(w, 0, sizeof(w));
         if(d<10)
          {
            sw[0] = 10;
            sw[1] = d;
          }
        else
        {
            sw[0] = d/10;
            sw[1] = d%10;
        }
        if(m<10)
        {
         sw[2] = 10;
         sw[3] = m;
        }

        else
        {
            sw[2] = m/10;
            sw[3] = m%10;
        }
        sw[4] = y/1000; y %= 1000;
        sw[5] = y/100; y %= 100;
        sw[6] = y/10; y %= 10;
        sw[7] = y;

        for(int i = 0; i<8; i++)
           switch(sw[i])
           {
            case 0: w[0] ++; break;
            case 1: w[1] ++; break;
            case 2: w[2] ++; break;
            case 3: w[3] ++; break;
            case 4: w[4] ++; break;
            case 5: w[5] ++; break;
            case 6: w[6] ++; break;
            case 7: w[7] ++; break;
            case 8: w[8] ++; break;
            case 9: w[9] ++; break;
            default: break;
           }
            bool bl = true;
            int i;
            for(i = 0; i<10; i++)
                if(w[i] !=0)
                {
                    break;
                }
             for(int j = i; j<10; j++)
             {
                    if(w[j] != w[i]&& w[j] != 0)
                       {
                       bl = false;
                        break;
                       }
             }
            if(bl)
                cout<<"yes"<<endl;
            else
                cout<<"no"<<endl;
        n--;
   }
    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值