C 计数器用于从数组中选择事物
C++ counter for selecting things from an array
我有一些代码,这些代码会从其他位置中随机选择元素和商店的元素,但是我只想能够选择一定次的元素每个。这是我的代码的摘录,概述了该问题。(对STD表示歉意,但这还不足以让我保证不使用STD(。
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
void setDaysOff();
string prepClasses[] = { "FREE", "1X", "4A", "4X", "5A", "5X", "6B", "6X" };
string seniorClasses[] = { "FREE", "7A", "7B", "7AB",
"8A", "8B", "8AB", "9A", "9B", "9AB", "10D", "10T","10X", "10AX",
"10BX", "10CX", "10Q", "11D", "11T", "11X", "11AX", "11BX", "11CX" };
string timetable[25][6][5];
int main() {
// ZEROING
setDaysOff();
// END OF ZEROING
srand ( time(NULL) );
int RandIndex;
int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0, a7 = 0, a8 = 0, a9 = 0, a10 = 0,
a11 = 0, a12 = 0, a13 = 0, a14 = 0, a15 = 0, a16 = 0, a17 = 0, a18 = 0, a19 = 0,
a20 = 0, a21 = 0, a22 = 0, a23 = 0;
for(int k = 0; k < 5; k++) {
for(int i = 0; i < 25; i++) {
for(int j = 0; j < 6; j++) {
if(timetable[i][j][k] != "0") {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
if(RandIndex == 0) {
a1++;
while(RandIndex == 0 && a1 > 12) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 1) {
a2++;
while(RandIndex == 1 && a2 > 8) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 2) {
a3++;
while(RandIndex == 2 && a3 > 10) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 3) {
a4++;
while(RandIndex == 3 && a4 > 8) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 4) {
a5++;
while(RandIndex == 4 && a5 > 8) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 5) {
a6++;
while(RandIndex == 5 && a6 > 10) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 6) {
a7++;
while(RandIndex == 6 && a7 > 3) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 7) {
a8++;
while(RandIndex == 7 && a8 > 5) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 8) {
a9++;
while(RandIndex == 8 && a9 > 6) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 9) {
a10++;
while(RandIndex == 9 && a10 > 5) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 10) {
a11++;
while(RandIndex == 10 && a11 > 9) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 11) {
a12++;
while(RandIndex == 11 && a12 > 3) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 12) {
a13++;
while(RandIndex == 12 && a13 > 8) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 13) {
a14++;
while(RandIndex == 13 && a14 > 4) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 14) {
a15++;
while(RandIndex == 14 && a15 > 6) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 15) {
a16++;
while(RandIndex == 15 && a16 > 6) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 16) {
a17++;
while(RandIndex == 16 && a17 > 8) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 17) {
a18++;
while(RandIndex == 17 && a18 > 12) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 18) {
a19++;
while(RandIndex == 18 && a19 > 10) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 19) {
a20++;
while(RandIndex == 19 && a20 > 7) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 20) {
a21++;
while(RandIndex == 20 && a21 > 5) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 21) {
a22++;
while(RandIndex == 21 && a22 > 10) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
else if(RandIndex == 22) {
a23++;
while(RandIndex == 22 && a23 > 9) {
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
}
}
timetable[i][j][k] = seniorClasses[RandIndex];
cout << timetable[i][j][k] << " " << flush;
}
else if(timetable[i][j][k] == "0") {
cout << "ABS " << flush;
}
}
cout << endl;
}
cout << endl;
}
return 0;
}
因此,现在,代码从高级级别中选择数据并输入它们,但我希望它之后,例如挑选10倍8次,停止代码再次选择10倍。这可能吗?谢谢!
解决此问题的一种方法是添加一个数组,每次添加与之关联的RandIndex项目时,都会将每个元素递增。说您的元素0 =免费,元素3 = 7a;随机选择7a时,您将增加元素3。
这种外观的一种方式是这样:
RandIndex = rand() % (sizeof(seniorClasses)/sizeof(string));
if (seniorClass[RandIndex]);
counterArray[RandIndex]++;
if (counterArray[RandIndex] < someValue)
timetable[i][j][k] = seniorClasses[RandIndex];
这不是最优雅的答案,但是在您的嵌套循环中,只要您的阵列尺寸不大,这样的解决方案就可以正常工作。如果您曾经想将其导出到可能接近100或更大数组尺寸的应用程序中
我没有尝试运行此代码,所以请使用这个想法并发挥创意,因为您可以为您当前的方法做这项工作。
您可能需要使用地图存储您已经使用的索引以及使用它们的次数。这不是一个完整的例子,但它使您可以了解自己可以做什么。
#include <string>
#include <map>
using namespace std;
int main()
{
map<size_t, size_t> indexCountMap; // key : index. value : number of times that index has been used
while(1)
{
size_t randomIndex = 0; // Generate a random index here that is within the boundary of "seniorClasses"
auto it = indexCountMap.find(randomIndex);
if (it == indexCountMap.end())
indexCountMap[randomIndex] = 1; // Create the entry in the map
else
indexCountMap[randomIndex]++; // Increment existing entry
if (10 == indexCountMap[randomIndex])
break;
}
}
另外,我不确定为什么您需要使用3D字符串数组。可能有更好的方法可以在1D结构中表达您的数据。
相关文章:
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 如何从向量或数组中选择最常见的数字?(前五名)C++
- 如何为我的数组选择更大的数据类型?
- 选择一个元素而不是一个对象的数组的原因
- 如何在 c++ 中从数组中选择一个随机数?
- 从C++数组中选择一个随机元素
- 选择随机字符串数组的排序
- 我的选择排序代码是否存在导致它跳过数组中的元素的问题?
- 给定数组范围的选择排序问题
- 使用 C++ 从每个循环的数组中选择 n 个元素
- 使用STD :: String和字符数组之间的选择
- 根据 C++11 中的模板参数选择数组大小
- "我该如何展示cout<<"发烧";因为我不熟悉字符串数组,它也卡在选择部分?
- C 计数器用于从数组中选择事物
- 如何映射数组元素以选择二进制树节点
- C 选择排序字符串数组
- 在对象数组上进行选择排序
- 未选择引用到数组的构造函数进行列表初始化
- 用户从菜单 C++ 中选择数组类型
- 我可以在默认初始化和值初始化之间进行选择,也可以选择数组的全部或部分