- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一种在 Mastermind 中最多猜测 5 次 secret 的算法。这是一项类作业,总的来说,我对编程有点陌生(轻描淡写),所以请耐心等待我可能错过的任何明显的事情。注意:我唯一可以使用的库是 <stdio.h>
.
对于初学者来说,代码:
#include <stdio.h>
#define feeddef() \
feed[0] = '0'; \
feed[1] = ' '; \
feed[2] = 'B'; \
feed[3] = ' '; \
feed[4] = '0'; \
feed[5] = ' '; \
feed[6] = 'C';
int secret[4];
void initSet(int (*gs)[4],int *gsGd,int *guess);
void goodGuess(int (*gs)[4],int *gsGd,char fb[20],int *guess);
void feedback(int *gues,char feed[20]);
void feedback(int *gues,char feed[20])
{
int i,j,temp[4], temp2[4];
feeddef();
for(i=0;i<4;i++)
{
temp[i] = gues[i];
temp2[i] = secret[i];
}
for(i = 0;i<4;i++)
if(temp[i] == temp2[i])
{
feed[0]++;
temp[i] = 7;
temp2[i] = 8;
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(temp[i] == temp2[j])
{
feed[4]++;
temp[i] = 9;
temp2[j] = 10;
}
}
void initSet(int (*gs)[4],int *gsGd,int *guess)
{
int i;
for(i=0;i<1296;i++)
{
gs[i][3] = i%6;
gs[i][2] = (i/6)%6;
gs[i][1] = ((i/6)/6)%6;
gs[i][0] = (((i/6)/6)/6)%6;
}
for(i=0;i<4;i++)
guess[i] = (i+2)/2;
}
void goodGuess(int (*gs)[4],int *gsGd,char fb[20],int *guess)
{
int i,j,count[1296],max_count = 0,max_index;
char fbck[1296][2];
char feed[20];
for(i=0;i<1296;i++)
{
printf("Guess #%d in set: ",i);
feedback(gs[i],feed);
if(feed[0] != fb[0] || feed[4] != fb[4])
{
printf("Not matching\n");
gsGd[i] = 0;
}
fbck[i][0] = feed[0];
fbck[i][1] = feed[4];
}
printf("minimax start---\n");
for(i=0;i<1296;i++)
{
count[i] = 0;
for(j=0;j<1296;j++)
{
if(gsGd[j] == 0)
continue;
else
{
if(fbck[i][0] != fbck[j][0] || fbck[i][1] != fbck[j][1])
count[i]++;
}
}
}
printf("---minimax end\n");
for(i=0;i<1296;i++)
printf("Index at %d cancels out %d indices.\n",i,count[i]);
for(i=0;i<1296;i++)
{
if(max_count < count[i])
{
printf("New max at index: %d\n",i);
max_count = count[i];
max_index = i;
}
}
printf("New guess is: ");
for(i=0;i<1296;i++)
{
if(fbck[i][0] != fbck[max_index][0] || fbck[i][1] != fbck[max_index][1])
gsGd[i] = 0;
}
for(i=0;i<4;i++)
{
guess[i] = gs[max_index][i];
printf("%d",guess[i]);
}
printf("\n");
}
int main()
{
int gs[1296][4],gsGd[1296],guess[4],i,count = 0;
char fback[20];
while(1)
{
for(i=0;i<4;i++)
scanf("%d",&secret[i]);
initSet(gs,gsGd,guess);
do
{
count++;
printf("Goodguess %d",count);
feedback(guess,fback);
goodGuess(gs,gsGd,fback,guess);
}while(fback[0] != '4');
printf("Solved in %d guesses\n",count);
}
return 0;
}
出于某种原因,goodGuess
的第二次迭代函数我在这一行收到访问冲突错误:
if(fbck[i][0] != fbck[max_index][0] || fbck[i][1] != fbck[max_index][1])
错误:
First-chance exception at 0x012643a6 in Mastermind.exe: 0xC0000005: Access violation reading location 0x99b00cc0.
Unhandled exception at 0x012643a6 in Mastermind.exe: 0xC0000005: Access violation reading location 0x99b00cc0.
据我了解,0xC0000005 接近 null 意味着它可能正在尝试访问 null,但我不知道是什么原因导致的。第一次就工作得很好。
我有一种感觉,我错过了一些重要的东西,但如果我知道它是什么,那我就该死了。
最佳答案
我的猜测是 max_index 未初始化。
创建 max_index 时代码不会赋值。您只需在 if 语句内赋值即可。因此,在第一次迭代中,if 语句找到 true 并且您获得 max_index 的值。在第二次迭代中,它没有找到 true,并且 max_index 未初始化。
在这种情况下我建议的一件事是——你有一个相当复杂的陈述。所以很高兴看到这四个中哪一个失败了。因此,只需创建四个小的不执行任何操作的语句 - 例如 if (fbck[i][0] == 1) printf("hi") 。
这可以让您缩小到该语句失败的部分。它还有助于打印出运行中每个变量的值 - 然后您可以运行代码,查看打印的最后一行,您将能够看到 i 和 max_index 是什么,这应该是一个巨大的线索关于正在发生的事情。
当您了解有关调试器和条件断点的更多信息时,您会发现比打印变量更好的方法!
关于c - 访问函数中的数组时发生访问冲突(函数内部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20530967/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!