- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
全部。
我想编写一个 Jeopardy 游戏,从文件中读取游戏的问题、答案、类别和问题难度级别,并根据从文件中检索到的数据生成问题板。但是,我一直在研究如何理解文件中的数据。
这是我目前得到的:
我的输入文件格式如下:
category
difficulty
question
answer
category
difficulty
question
answer
等等等等。可以有任意数量的类别 - 游戏会随机选择其中的 6 个。有 5 个难度级别 (0-4) 来表示原始 Jeopardy 游戏的“美元增量”,这将由它们各自的整数 (0-4) 表示。接下来当然是问答环节。示例输入文件可能如下所示:
Star Trek
0
This is the vessel that explores the galaxy.
What is the Enterprise?
Star Wars
2
These guys always miss.
What are the storm troopers?
等等,等等。如您所见,类别可以按任何顺序显示,难度级别也是如此。我的问题是设计一个算法来处理这些事情。
我开始考虑将我的问题和答案放在二维数组中:第一个问题将占据单元格 [0][0],第一个答案将占据单元格 [0][1],下一个问题将占据单元格 [1][0],下一个答案 [1][1],等等。接下来,为了按难度排序,我想象了一个 3D 数组:多个 2D 数组,由按难度级别划分的问题和答案组成.最后,我发现通过增加一个维度并制作一个 4D 数组,我可以按类别对我的难度级别进行排序。这样的数组首先会给我所有类别,然后是每个类别的所有难度级别,然后是每个类别中每个难度级别的所有问题和答案。然后该数组将被传递给实际使用排序数据的不同函数。
听起来好像可行,对吧?出色地。我正在努力制作一种将所有内容都放在正确位置的算法。我以前从未使用过大于 2D 的数组,因此 4D 数组的概念对我来说相当难以理解。我将在下面粘贴我当前的代码供所有人阅读和评论,我热切地等待任何和所有建议。如有必要,我可以更改文件的格式,但这种 4 行的组织方法是我尝试的唯一方法。
void oldReadFromFile(std::string dataArray[][5][30][4], int length)
{
/*****************
The input file must be formatted as follows:
Category //capitalization counts
Dificulty //as an integer 0-4
Question
Answer
Category //capitalization counts
Dificulty //as an integer 0-4
Question
Answer
etc.
*****************/
std::ifstream inFile;
std::string category;
std::string dificulty;
std::string question;
std::string answer;
int numOfQuestions[30][5] = {0};
int numOfCategories = 0;
bool alreadyHere;
inFile.open("JeopardyData.txt");
//Determine question category
while (!inFile.eof() && numOfCategories < length) {
std::getline(inFile, category);
std::getline(inFile, dificulty);
std::getline(inFile, question);
std::getline(inFile, answer);
//inFile.get();
alreadyHere = false;
for (int i = 0; i < numOfCategories; i++)
{
if (category == dataArray[i][0][0][0]) //If the category already exists...
{
alreadyHere = true;
if (dificulty == "zero" || dificulty == "Zero" || dificulty == "0") //Determine the dificulty
{
dataArray[i][0][numOfQuestions[i][0]][1] = question;
dataArray[i][0][numOfQuestions[i][0]][2] = answer;
numOfQuestions[i][0]++;
}
else if (dificulty == "one" || dificulty == "One" || dificulty == "1")
{
dataArray[i][1][numOfQuestions[i][1]][1] = question;
dataArray[i][1][numOfQuestions[i][1]][2] = answer;
numOfQuestions[i][1]++;
}
else if (dificulty == "two" || dificulty == "Two" || dificulty == "2")
{
dataArray[i][2][numOfQuestions[i][2]][1] = question;
dataArray[i][2][numOfQuestions[i][2]][2] = answer;
numOfQuestions[i][2]++;
}
else if (dificulty == "three" || dificulty == "Three" || dificulty == "3")
{
dataArray[i][3][numOfQuestions[i][3]][1] = question;
dataArray[i][3][numOfQuestions[i][3]][2] = answer;
numOfQuestions[i][3]++;
}
else if (dificulty == "four" || dificulty == "Four" || dificulty == "4")
{
dataArray[i][4][numOfQuestions[i][4]][1] = question;
dataArray[i][4][numOfQuestions[i][4]][2] = answer;
numOfQuestions[i][4]++;
}
else { std::cout << "Bad dificulty detected in input file!\n"; }
}
}
if (!alreadyHere) //If the category DOESN'T exist yet, make it.
{
for (int i = 0; i < 5; i++)
{
dataArray[numOfCategories][i][0][0] = category;
}
if (dificulty == "zero" || dificulty == "Zero" || dificulty == "0") //Determine the dificulty
{
dataArray[numOfCategories][0][numOfQuestions[numOfCategories][0]][1] = question;
dataArray[numOfCategories][0][numOfQuestions[numOfCategories][0]][2] = answer;
numOfQuestions[numOfCategories][0]++;
}
else if (dificulty == "one" || dificulty == "One" || dificulty == "1")
{
dataArray[numOfCategories][1][numOfQuestions[numOfCategories][1]][1] = question;
dataArray[numOfCategories][1][numOfQuestions[numOfCategories][1]][2] = answer;
numOfQuestions[numOfCategories][1]++;
}
else if (dificulty == "two" || dificulty == "Two" || dificulty == "2")
{
dataArray[numOfCategories][2][numOfQuestions[numOfCategories][2]][1] = question;
dataArray[numOfCategories][2][numOfQuestions[numOfCategories][2]][2] = answer;
numOfQuestions[numOfCategories][2]++;
}
else if (dificulty == "three" || dificulty == "Three" || dificulty == "3")
{
dataArray[numOfCategories][3][numOfQuestions[numOfCategories][3]][1] = question;
dataArray[numOfCategories][3][numOfQuestions[numOfCategories][3]][2] = answer;
numOfQuestions[numOfCategories][3]++;
}
else if (dificulty == "four" || dificulty == "Four" || dificulty == "4")
{
dataArray[numOfCategories][4][numOfQuestions[numOfCategories][4]][1] = question;
dataArray[numOfCategories][4][numOfQuestions[numOfCategories][4]][2] = answer;
numOfQuestions[numOfCategories][4]++;
}
else { std::cout << "Bad dificulty detected in input file!\n"; }
numOfCategories++;
}
}
}
最佳答案
从我从您的问题中解释的内容来看,您似乎使事情过于复杂了。我的建议是创建一个数组,如下所示:
struct Game_Node
{
string category;
int difficulty;
string question;
string answer;
};
Game_Node jeopardy_board[];
或
Game_Node jeopardy_board[][];
更好地模拟危险板。然后,您所要做的就是遍历文件并填充每个元素的变量。简单示例:
//assumes variables have values and is just for the first node
jeopardy_board[0][0].category = (value goes here);
jeopardy_board[0][0].difficulty = (value goes here);
等等
关于C++ Jeopardy 游戏算法设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21294838/
滑动窗口限流 滑动窗口限流是一种常用的限流算法,通过维护一个固定大小的窗口,在单位时间内允许通过的请求次数不超过设定的阈值。具体来说,滑动窗口限流算法通常包括以下几个步骤: 初始化:设置窗口
表达式求值:一个只有+,-,*,/的表达式,没有括号 一种神奇的做法:使用数组存储数字和运算符,先把优先级别高的乘法和除法计算出来,再计算加法和减法 int GetVal(string s){
【算法】前缀和 题目 先来看一道题目:(前缀和模板题) 已知一个数组A[],现在想要求出其中一些数字的和。 输入格式: 先是整数N,M,表示一共有N个数字,有M组询问 接下来有N个数,表示A[1]..
1.前序遍历 根-左-右的顺序遍历,可以使用递归 void preOrder(Node *u){ if(u==NULL)return; printf("%d ",u->val);
先看题目 物品不能分隔,必须全部取走或者留下,因此称为01背包 (只有不取和取两种状态) 看第一个样例 我们需要把4个物品装入一个容量为10的背包 我们可以简化问题,从小到大入手分析 weightva
我最近在一次采访中遇到了这个问题: 给出以下矩阵: [[ R R R R R R], [ R B B B R R], [ B R R R B B], [ R B R R R R]] 找出是否有任
我正在尝试通过 C++ 算法从我的 outlook 帐户发送一封电子邮件,该帐户已经打开并记录,但真的不知道从哪里开始(对于 outlook-c++ 集成),谷歌也没有帮我这么多。任何提示将不胜感激。
我发现自己像这样编写了一个手工制作的 while 循环: std::list foo; // In my case, map, but list is simpler auto currentPoin
我有用于检测正方形的 opencv 代码。现在我想在检测正方形后,代码运行另一个命令。 代码如下: #include "cv.h" #include "cxcore.h" #include "high
我正在尝试模拟一个 matlab 函数“imfill”来填充二进制图像(1 和 0 的二维矩阵)。 我想在矩阵中指定一个起点,并像 imfill 的 4 连接版本那样进行洪水填充。 这是否已经存在于
我正在阅读 Robert Sedgewick 的《C++ 算法》。 Basic recurrences section it was mentioned as 这种循环出现在循环输入以消除一个项目的递
我正在思考如何在我的日历中生成代表任务的数据结构(仅供我个人使用)。我有来自 DBMS 的按日期排序的任务记录,如下所示: 买牛奶(18.1.2013) 任务日期 (2013-01-15) 任务标签(
输入一个未排序的整数数组A[1..n]只有 O(d) :(d int) 计算每个元素在单次迭代中出现在列表中的次数。 map 是balanced Binary Search Tree基于确保 O(nl
我遇到了一个问题,但我仍然不知道如何解决。我想出了如何用蛮力的方式来做到这一点,但是当有成千上万的元素时它就不起作用了。 Problem: Say you are given the followin
我有一个列表列表。 L1= [[...][...][.......].......]如果我在展平列表后获取所有元素并从中提取唯一值,那么我会得到一个列表 L2。我有另一个列表 L3,它是 L2 的某个
我们得到二维矩阵数组(假设长度为 i 和宽度为 j)和整数 k我们必须找到包含这个或更大总和的最小矩形的大小F.e k=7 4 1 1 1 1 1 4 4 Anwser是2,因为4+4=8 >= 7,
我实行 3 类倒制,每周换类。顺序为早类 (m)、晚类 (n) 和下午类 (a)。我固定的订单,即它永远不会改变,即使那个星期不工作也是如此。 我创建了一个函数来获取 ISO 周数。当我给它一个日期时
假设我们有一个输入,它是一个元素列表: {a, b, c, d, e, f} 还有不同的集合,可能包含这些元素的任意组合,也可能包含不在输入列表中的其他元素: A:{e,f} B:{d,f,a} C:
我有一个子集算法,可以找到给定集合的所有子集。原始集合的问题在于它是一个不断增长的集合,如果向其中添加元素,我需要再次重新计算它的子集。 有没有一种方法可以优化子集算法,该算法可以从最后一个计算点重新
我有一个包含 100 万个符号及其预期频率的表格。 我想通过为每个符号分配一个唯一(且前缀唯一)的可变长度位串来压缩这些符号的序列,然后将它们连接在一起以表示序列。 我想分配这些位串,以使编码序列的预
我是一名优秀的程序员,十分优秀!