我被告知编写生成唯一5位数的程序(例如12345是唯一的,11234不是) 我写了以下代码
#include <iostream>
#include <stdlib.h>
#include <map>
using namespace std;
using std::rand;
const int k=99999-10234;
bool unique(int t){
map<int,int>my;
map<int,int>::iterator it;
while (t!=0){
++my[t%10];
t/=10;
}
for (it=my.begin();it!=my.end();it++){
if ( it->second>0) {
return false;
}
}
return true;
}
int main(){
int m=0;
m= 10234+ rand()%k;
if (unique(m)){
cout<<" unique number was generated =:"<<m<<" ";
}
else{
do{
m=10234+rand()%k;
if (unique(m)){
cout<<"unique number was generated"<<m<<" ";
break;
}
} while(!unique(m));
}
return 0;
}
但它没有显示任何输出请帮我解决我的代码中哪些不好?
答案 0 :(得分:5)
我认为这一行:
if ( it->second>0) {
应该是:
if ( it->second>1) {
因为当你找到一个数字的第一个实例并把它放在地图中时,地图中该数字的值将为1,而不是0.
答案 1 :(得分:3)
我想有更简单的方法来生成您需要的数字,例如
std::vector<int> digs;
for (int i = 0; i < 10;++i)
digs.push_back(i); // Init digits
std::random_shuffle(digs.begin(), digs.end()); // Get random 10-digits number
int result = 0;
int i = 0;
while (result < 10000) { // Get 5-digit number from it
result*=10;
result += digs[i];
++i;
}
cout << result << endl;