zoukankan      html  css  js  c++  java
  • 平衡数--全国模拟(二)

    [编程题] 平衡数
    时间限制:1秒
    空间限制:32768K
    牛牛在研究他自己独创的平衡数,平衡数的定义是:将一个数分成左右两部分,分别成为两个新的数。
    左右部分必须满足以下两点:
    1,左边和右边至少存在一位。
    2,左边的数每一位相乘如果等于右边的数每一位相乘,则这个数称为平衡数。
    例如:1221这个数,分成12和21的话,1*2=2*1,则称1221为平衡数,再例如:1236这个数,可以分成123和1*2*3=6,所以1236也是平衡数。而1234无论怎样分也不满足平衡数。 
    输入描述:
    输入一个正整数(int范围内)。
     
     
    输出描述:
    如果该数是平衡数,输出 "YES", 否则输出 "NO"。
     
    输入例子:
    1221 1234
     
    输出例子:
    YES NO
     
    解题思路:用vector存储数字的每一位,然后start指向vector的起始,end指向vector的结束。然后进行操作,知道start == end 或者start == end-1&&left==right时结束循环。
    对于left<right 则start++  left>end end--  相等时判断是否结束,未结束,其中一个移动进行下一次判断。结束跳出循环。
    注意:针对数中包含偶数个0的情况,进行单独处理
    length == 1的情况单独处理
     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 bool isTwoZero(vector<int> a)
     5 {
     6     int count = 0;
     7     for(int i=0;i<a.size();i++)
     8     {
     9         if(a[i] == 0)
    10             count++;
    11     }
    12     if(count && count%2==0)
    13         return true;
    14     else
    15         return false;
    16 }
    17 int main()
    18 {
    19     int n;
    20     while(cin>>n)
    21     {
    22         vector<int> a;
    23         while(n)
    24         {
    25             a.push_back(n%10);
    26             n /=10;
    27         }
    28         int length = a.size();
    29         int start = 0;
    30         int left = a[start];
    31         int end = length-1;
    32         int right = a[end];
    33         while(start<end)
    34         {
    35             if(left < right)
    36             {
    37                 start++;
    38                 left *= a[start];
    39             }
    40             else if(left > right)
    41             {
    42                 end--;
    43                 right *= a[end];
    44             }
    45             else
    46             {
    47                 if(start == end -1)
    48                 {
    49                     break;
    50                 }
    51                 else
    52                 {
    53                     start++;
    54                     left *= a[start];
    55                 }
    56             }
    57         }
    58         if(length == 1)
    59             cout<<"NO"<<endl;
    60         else if(isTwoZero(a))
    61             cout<<"YES"<<endl;
    62         else if(left == right)
    63             cout<<"YES"<<endl;
    64         else
    65             cout<<"NO"<<endl;
    66     }
    67     return 0;
    68 }
    网上思路参考:针对位i,比较0-i乘积与i+1-length-1乘积是否相等,,有相等的就退出for循环,结束输出YES,否则输出NO
    针对一位的数字,单独处理
     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4  
     5 void BalanceNum(int Num)
     6 {
     7     vector<int> vec;
     8     while (Num)
     9     {
    10         int aa;
    11         aa = Num % 10;
    12         vec.push_back(aa); //按位放入数组中
    13         Num = Num / 10;
    14     }
    15     //只有一个数字时,输出“NO”
    16     if (vec.size() == 1)
    17     {
    18         cout << "NO" << endl;
    19         return;
    20     }
    21     for (int i = 0; i<vec.size(); i++)
    22     {
    23         int begin = 1;
    24         int end = 1;
    25         //开始到变量i之间的数字的乘积
    26         for (int j = 0; j<i; j++)
    27         {
    28             begin *= vec[j];
    29         }
    30         //变量i到结束数字的乘积
    31         for (int k = i; k<vec.size(); k++)
    32         {
    33             end *= vec[k];
    34         }
    35         //存在相等的情况输出“YES”,并结束所有判断
    36         if (begin == end)
    37         {
    38             cout<<"YES"<<endl;
    39             return;
    40         }
    41     }
    42     cout << "NO" << endl;
    43 }
    44  
    45 int main()
    46 {
    47     int N;
    48     cin >> N;
    49     BalanceNum(N);
    50     return 0;
    51 }


     

  • 相关阅读:
    我的第一篇博客
    吴裕雄--天生自然python学习笔记:Python3 标准库概览
    吴裕雄--天生自然python学习笔记:Python3 命名空间和作用域
    吴裕雄--天生自然python学习笔记:Python3 面向对象
    吴裕雄--天生自然python学习笔记:Python3 错误和异常
    吴裕雄--天生自然python学习笔记:Python3 OS 文件/目录方法
    吴裕雄--天生自然python学习笔记:Python3 File(文件) 方法
    吴裕雄--天生自然python学习笔记:Python3 输入和输出
    吴裕雄--天生自然python学习笔记:Python3 模块
    吴裕雄--天生自然python学习笔记:Python3 数据结构
  • 原文地址:https://www.cnblogs.com/qqky/p/7001737.html
Copyright © 2011-2022 走看看