神奇数
2017-09-09 22:51
155 查看
//这里的神奇数定义:数的所有位分成两组,2组数字的和相等 //规定负数不是神奇数 #include<iostream> #include<algorithm> using namespace std; #define N 10 class Solution { public: //判断一个数是不是神奇数,负数不是神奇数 bool isSubsetSplit( int number ) { if( number < 11 ) return false; int array { 0 }; int sum = 0; int bits = 0; int halfSum = 0; while( number != 0 ) { array[++bits] = number % 10; number /= 10; sum += array[bits]; } array[0] = bits; if( sum % 2 == 1 ) return false; else { sort( &array[1], &array[bits + 1] ); do { halfSum = 0; for( int i = 1; i <= bits; i++ ) { halfSum += array[i]; if( halfSum * 2 == sum ) return true; if( halfSum * 2 > sum ) break; } } while( next_permutation( &array[1], &array[bits + 1] ) ); } return false; } //[l,r]范围内的神奇数个数 int countMagicNumberBetween( int l, int r ) { if( r <= 10 || r < l ) return 0; l = max( 11, l ); int count = 0; for( int i = l; i <= r; i++ ) { if( isSubsetSplit( i ) ) count++; } return count; } }; int main( ) { Solution s; int l, r; while( true ) { cin >> l; cin >> r; cout << s.countMagicNumberBetween( l, r ) << endl; } system( "pause" ); return 0; }
相关文章推荐
- noi2006神奇口袋
- 今天遇到一个神奇的问题--万能的alert出问题了,javascript怎么办?
- 神奇的weblogic,Connection关闭与Result set already closed!
- 神奇的分形艺术(一):无限长的曲线可能围住一块有限的面积
- 55个 神奇的华丽的网站布局(下)
- 神奇加蛋疼的Oracle 11g连接
- InfoQ神奇相关数据
- 可以检查身体健康的神奇眼镜
- 灵活而神奇的 伸展树!
- 神奇的验证码,我们一起来探究
- poj1149 PIGS 最大流 神奇的建图
- 神奇的catalan数
- CSS3演绎神奇按钮效果(HTML5)
- 神奇的"javascript:"
- 神奇的图像处理算法
- [HNOI2008]神奇的国度
- DBA真是种神奇的职业
- 二维数组的神奇用法(杭电1004)
- 神奇的气泡图形,传递信息的使者
- 说说windows xp中F1-F12的神奇作用