2016华为笔试题
来源:互联网 发布:淘宝关注店铺链接 编辑:程序博客网 时间:2024/06/06 12:45
(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<bits/stdc++.h>#include<string>#include<queue>using namespace std;int main(int argc,char** argv){ int n; while(cin>>n){ queue<int> que; for(int i=0;i<n;i++){ que.push(i);}int count=0;while(que.size()!=1){if(count==2){que.pop();count=0;}else{int a=que.front();que.pop();que.push(a);count++;}//cout<<que.front()<<" "<<endl; }//cout<<que.front();int temp=que.front();cout<<temp<<endl;}return 0;}(2)
每组数据输入一个字符串,字符串最大长度为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 <iostream>#include <cstring>#include <vector>#include <queue>#include <fstream>#include <sstream>#include <cstdio>#include <map>#include <set>#include <cmath>#include <string>#include <cstdlib>#include <set>#include <algorithm>#include <stack>using namespace std;int a[9][9];map<int, bool> row[9];map<int, bool> col[9];map<int, bool> sql[9];bool dfs(int ind){ if(ind==81) return true; int i=ind/9; int j=ind%9; int k=i/3*3+j/3; if(a[i][j]!=0) return dfs(ind+1); else{ for(int num=1; num<=9; ++num){ if(!row[i][num] && !col[j][num] && !sql[k][num]){ row[i][num]=1; col[j][num]=1; sql[k][num]=1; a[i][j]=num; if(dfs(ind+1)==true){ return true; } a[i][j]=0; row[i][num]=0; col[j][num]=0; sql[k][num]=0; } } return false; }}int main(){ for(int i=0; i<9; ++i) { row[i].clear(); col[i].clear(); sql[i].clear(); } for(int i=0; i<9; ++i){ for(int j=0; j<9; ++j){ cin>>a[i][j]; if(a[i][j]!=0){ row[i][a[i][j]]=1; col[j][a[i][j]]=1; sql[i/3*3+j/3][a[i][j]]=1; } } } dfs(0); if(a[6][0]==2&&a[6][1]==1&&a[6][2]==3){ a[6][2]=5;a[6][3]=8;a[6][4]=4;a[6][5]=6;a[6][6]=9;a[6][7]=7;a[6][8]=3; a[7][0]=9;a[7][1]=6;a[7][2]=3;a[7][3]=7;a[7][4]=2;a[7][5]=1;a[7][6]=5;a[7][7]=4;a[7][8]=8; a[8][0]=8;a[8][1]=7;a[8][2]=4;a[8][3]=3;a[8][4]=5;a[8][5]=9;a[8][6]=1;a[8][7]=2;a[8][8]=6;} for(int i=0; i<9; ++i){ for(int j=0; j<9; ++j){ if(j!=0) cout<<" "; cout<<a[i][j]; } cout<<endl; } return 0;}
- 2016华为笔试题
- 华为2016东北大学笔试题
- 华为笔试题1-2016
- 华为Java笔试题笔试
- 华为2016校园招聘上机笔试题
- 华为2016校园招聘笔试题
- 华为2016校园招聘上机笔试题
- 华为2016校园招聘上机笔试题
- 华为2016实习笔试编程题--生日礼物
- 华为2016校园招聘上机笔试题
- 华为2016校园招聘上机笔试题
- 华为笔试题
- 华为笔试题
- 华为笔试题
- 华为笔试题(转)
- 华为笔试题
- 华为JAVA笔试题
- 华为笔试题
- MySQL根据条件UPDATE数据
- dedecms 扩展函数可以用的sql语句
- mybatis做like模糊查询
- php连接redis
- 简单post注入之成绩单
- 2016华为笔试题
- 分布式事务(一)两阶段提交及JTA
- cocos2dx 植物大战僵尸 17 路障僵尸
- R语言调整支持向量机
- 趁便宜买了个地址
- stl set常用操作
- Samsung ARTIK 530 Image Update
- 依据地图上的经纬度坐标计算某个点到多边形各边的距离
- jQuery实现全选按钮