本文共 2339 字,大约阅读时间需要 7 分钟。
(1)有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
分析:(1)队列实现
(2)(网上看到的)//递推公式:f[1] = 0 ,f[n] = (f[n - 1] + K) mod n 约瑟夫问题
程序:
#include(2)#include #include using namespace std;int main(int argc,char** argv){ int n; while(cin>>n){ queue que; for(int i=0;i
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
输入例子:
abcqweracb
输出例子:
abcqwer
(3)数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。
输入描述:
输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的。
输出描述:
输出九行,每行九个空格隔开的数字,为解出的答案。
分析:
这里的数独就是9行9列的数组,满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。
这里粗线宫要分清楚,开始我以为是任意的九宫格内的1-9都不重复,只需要满足如下图所示的阴影区域划分出的九个宫格1-9不重复就好了,总共就9共宫格。
解题思路:DFS深度填数检测+回溯法
1,先把有数字的地方设置标记位为true
2,循环遍历数组中没有标记位true的地方,也就是需要填数的地方
如果当前为0,即a[i][j]==0,判断当前所在的九宫格,然后从数字1-9依次检测是否在行、列、宫中唯一
满足唯一的话,则吧数字赋值给a[i][j]=l+1;然后继续深度遍历为true的话就返回true,否则回溯a[i][j]==0等
不满足满足唯一则判断下一个数字,直到1-9都判断不满足则返回false,会回溯到上一层
如果当前没有0,说明都已经填满且符合唯一条件,则返回true;结束
程序:
#include#include #include #include #include #include #include #include
转载地址:https://blog.csdn.net/xiaochen87654321/article/details/72881002 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!