| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
超时,哪位大神可以帮我看看程序?#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <map>
#include <cstring>
#include <sstream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
string data;
int m[10];
map<string,int> v;
bool flag = 0;
int flagLength = 0;
string change(string data) {
string re = "";
int i;
memset(m,0,sizeof(m));
for(i = 0; i < data.length(); i++) {
m[(data[i]-'0')] ++;
}
for(i = 0; i <= 9; i++) {
if(m[i] != 0) {
stringstream ss;
ss << re << m[i] << i;
re = ss.str();
}
}
return re;
}
int self_inventorying(string data) {
v.clear();
int i;
string s = data;
string temp;
v[s] = 0;
for(i = 0; i < 15; i++) {
temp = change(s);
//cout << temp << endl;
if(temp == s) {
break;
}else {
if(v.count(temp) && flag == 0) {
flag = 1;
flagLength = i+1-v[temp];
s = temp;
continue;
}else {
s = temp;
v[temp] = i+1;
//cout << temp << " " << v[temp] << endl;
}
}
}
return i;
}
int main() {
while(1) {
cin >> data;
if(data == "-1") {
break;
}else {
flagLength = 0;
flag = 0;
int i= self_inventorying(data);
if(i == 0) {
cout << data << " is self-inventorying" << endl;
}else if(i < 15) {
cout << data << " is self-inventorying after " << i << " steps" << endl;
}else if(i >= 15 && flag == 1) {
cout << data << " enters an inventory loop of length " << flagLength << endl;
}else {
cout << data << " can not be classified after 15 iterations" << endl;
}
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator