admin管理员组文章数量:1558880
抽签助手实现(学习记录)
//今天突发奇想想要尝试一波抽签助手
具体代码如下:
#include<iostream>
#include<ctime>
#include<string>
using namespace std;
string name[31] =
{
"a",
"b",
"c" ,
"d" ,
"e" ,
"f" ,
"g" ,
"h" ,
"i" ,
"j" ,
"k" ,
"l" ,
"m" ,
"n" ,
"o" ,
"p" ,
"q" ,
"r" ,
"s" ,
"t" ,
"u" ,
"v" ,
"w" ,
"x" ,
"y" ,
"z" ,
"A" ,
"B" ,
"C" ,
"D" ,
"E" ,
};
bool judgement(int* p, int y, int x);
void func(int x)
{
int* p = new int[x]();
int i = 0, num;
while (i < x)
{
num = rand() % 31;
num++;
bool a = judgement(p, num, x);
if (a)
{
p[i] = num;
i++;
}
else
{
continue;
}
}
cout << "本次抽到的是:" << endl;
for (int i = 0; i < x; i++)
{
cout << name[p[i] - 1] << " ";
//cout << p[i]-1 << endl;
}
delete[]p;
}
bool judgement(int* p, int y, int x)
{
for (int i = 0; i < x; i++)
{
if (y == p[i])
{
return false;
break;
}
else
{
continue;
}
}
return true;
}
int main()
{
srand((int)time(NULL));
int num1, temp = 1;
while (temp)
{
int var = 1, pig = 1;
while (pig)
{
cout << "抽签按1,退出按0" << endl;
cin >> temp;
if (temp == 0)
{
return 0;
}
else if (temp == 1)
{
cout << "输入成功!" << endl;
}
else
{
cout << "输入错误,请重新输入!" << endl;
system("pause");
system("cls");
continue;
}
pig = 0;
}
while (var)
{
cout << "请问您本次需要抽取几个人?" << endl;
cin >> num1;
if (num1 <= 0 || num1 >= 32)
{
cout << "输入错误,请重新输入!" << endl;
system("pause");
system("cls");
continue;
}
var = 0;
}
func(num1);
system("pause");
system("cls");
}
}
1、首先先定义一个string类型的数组。
2、主函数的实现:
使用srand((int)time(NULL)),这样就可以随机抽取,而不是每一次都抽取相同的人。
使用while循环判断输入是否正确,并设置多个int类型变量用来判断。如果输入错误将一直循环下去,如果输入正确则变量为0,跳出循环。
3、如果上述过程全部完成后,将开始调用func函数,开始随机抽取人数。num1为用户希望抽取的人数。
在func函数中,首先在堆区开辟了一块新的内存空间,空间大小与输入的num1有关。
本程序还设置了judgement函数,用来判断抽取的人是否会重复。如果重复,将返回false,抽到的人的序号并不会存放在内存空间中,照此循环下去,直到结束。
4、小细节:new int[x] (),在结尾处添加了(),所有元素将被初始化为0.因此在生成随机数的时候,为了避免生成0而带来判断的困难,我将所有的随机数都增加了1,最后输出时再减去1,这样就可以避免上述问题。
以上就是我的思路和讲解。
C++初学者在此,上述代码和讲解如有问题请大家指出!
本文标签: 助手
版权声明:本文标题:抽签助手 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727404684a1113237.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论