您的位置:首页 > 其它

POJ 1016: Numbers That Count

2016-01-25 11:04 369 查看
没啥说的.

代码如下:

#include <iostream>
#include <vector>
using namespace std;

void kronecker( vector<string>& v, int cnt ) {
vector<int> cal( 10, 0 );
for( string::const_iterator pos = v[cnt].begin(); pos < v[cnt].end(); ++pos ) {
++cal[*pos - '0'];
}
v[++cnt].clear();
for( int i = 0; i < 10; ++i ) {
if( cal[i] != 0 ) {
if( cal[i] >= 10 ) {
v[cnt] += char( cal[i] / 10 + '0' );
}
v[cnt] += char( cal[i] % 10 + '0' );
v[cnt] += char( i + '0' );
}
}
if( v[cnt] == v[cnt - 1] ) {
if( cnt == 1 ) {
cout << v[0] << " is self-inventorying" << endl;
} else {
cout << v[0] << " is self-inventorying after " << cnt - 1 << " steps" << endl;
}
return;
}
for( int i = 0; i < cnt; ++i ) {
if( v[cnt] == v[i] ) {
cout << v[0] << " enters an inventory loop of length " << cnt - i << endl;
return;
}
}
if( cnt == 15 ) {
cout << v[0] << " can not be classified after 15 iterations" << endl;
return;
}
kronecker( v, cnt );
}

int main() {
vector<string> v( 16 );
while( cin >> v[0] && v[0][0] != '-' ) {
kronecker( v, 0 );
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: