#include <iostream>
#include <ctime>
using namespace std;
int main() {
unsigned times = 6, min = 1, max = 49, good = 0;
srand(6);
for(unsigned i = 0; i < times; ++i){
cout << "[Draw nr: " << i+1 << "]" << endl;
int num, drawn = rand()%max+min;
cin >> num;
cout << "drawn: " << drawn << endl;
if(num == drawn)
good += 1;
}
cout << good << "/" << times;
return 0;
}
http://ideone.com/Tb3YqT
stdin:
8 34 3 4 5 6
stdout:
[Draw nr: 1]
drawn: 8
[Draw nr: 2]
drawn: 34
[Draw nr: 3]
drawn: 15
[Draw nr: 4]
drawn: 26
[Draw nr: 5]
drawn: 2
[Draw nr: 6]
drawn: 39
2/6
<font size="9" color="black">//EDIT:</span>
#include <iostream>
#include <type_traits>
#include <random>
#include <algorithm>
using namespace std;
template<typename T>
struct PrimitiveWrapper{
static_assert(is_fundamental<T>::value, "T is not fundamental");
using value_type = char;
T &ref;
const size_t max = sizeof(T);
size_t used_size;
PrimitiveWrapper(T &ref, size_t used): ref(ref), used_size(used){}
size_t max_size() const
{ return max; }
size_t size() const
{ return used_size; }
void push_back(value_type val)
{ if(used_size<max) at(used_size++) = val; else throw std::out_of_range("PrimitiveWrapper kaput"); }
value_type &at(size_t idx)
{ return *(begin()+idx); }
value_type *begin()
{ return reinterpret_cast<value_type*>(&ref); }
value_type *end()
{ return begin() + sizeof(ref); }
};
template<typename T>
auto wrap(T &ref, size_t size_already_used = 0)
{ return PrimitiveWrapper<T>(ref, size_already_used); }
//divine-version; Not recommended for mortals
template<typename T>
void unique_random_for_wrappers(T cont, typename T::value_type min, typename T::value_type max){
default_random_engine gen;
uniform_int_distribution<typename T::value_type> dist(min, max);
for(size_t i = 0; i < cont.max_size();){
auto drawn = dist(gen);
if(find(begin(cont), end(cont), drawn) == end(cont)){
cont.push_back(drawn);
i += 1;
}
}
}
int main() {
unsigned times = 6, min = 1, max = 49, good = 0;
uint64_t cont;
auto drawn_numbers = wrap(cont);
unique_random_for_wrappers(drawn_numbers, min, max);
sort(begin(drawn_numbers), end(drawn_numbers));
for(unsigned i = 0; i < times; ++i){
cout << "{Draw[" << i << "] = " << (int)drawn_numbers.at(i) << "}\n";
int num;
cin >> num;
if(num == drawn_numbers.at(i))
good += 1;
}
cout << good << "/" << times;
return 0;
}
W zasadzie tablice wciąż nie zostały użyte ;)