每组数据为一行一个整数n(小于等于1000),为数组成员数,如100,则对a[999]进行计算。
一行输出最后一个被删掉的数的原始下标位置。
8
6
#include<cstdio> #include<queue> using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF) { queue<int>Q; for(int i=0;i<n;i++) { Q.push(i); } int cnt=0,tmp; while(!Q.empty()) { ++cnt; tmp=Q.front(); Q.pop(); if(cnt==3){cnt=0;} else { if(Q.empty()) break; Q.push(tmp); } } printf("%d\n",tmp); } return 0; }
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
abcqweracb
abcqwer
#include<stdio.h> #include<string.h> using namespace std; int main() { char ch[105]; char num[55]; while(scanf("%s",ch)!=EOF) { bool vis[260]={false}; int cnt=0; for(int i=0;ch[i];i++) { if(!vis[ch[i]]) { vis[ch[i]]=true; num[cnt++]=ch[i]; } } num[cnt]='\0'; for(int i=0;i<cnt;i++) printf("%c",num[i]); printf("\n"); } return 0; }
输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的。
输出九行,每行九个空格隔开的数字,为解出的答案。
先说下数独的游戏规则:
在一个9x9的方格中,你需要把数字1-9填写到空格当中,并且使方格的每一行和每一列中都包含1-9这九个数字。同时还要保证,空格中用粗线划分成9个3x3的方格也同时包含1-9这九个数字。比如有这样一个题,大家可以仔细观察一下,在这里面每行、每列,以及每个3x3的方格都包含1-9这九个数字。
不过现在牛客的数据没过,管理员还在调试。。。大家可以讨论下。
链接:http://www.nowcoder.com/profile/825348/codeBookDetail?submissionId=1097998
#include<stdio.h> struct point { int x, y; } p[81]; int num, flag, map[10][10]; int judge(int n, int k) { int i, j, x, y; for(i = 0; i < 9; i++) { if(i != p[n].y && map[p[n].x][i] == k) return 0; if(i != p[n].x && map[i][p[n].y] == k) return 0; } x = p[n].x / 3 * 3; y = p[n].y / 3 * 3; for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) if(map[x+i][y+j] == k && (i != p[n].x || j != p[n].y)) return 0; return 1; } void dfs(int n) { int i; if(n == num) { flag = 1; return; } for(i = 1; i < 10; i++) { if(judge(n, i)) { map[p[n].x][p[n].y] = i; dfs(n + 1); if(flag) return; map[p[n].x][p[n].y] = 0; } } return; } int main() { int i, j, t = 0; char s[2]; while(scanf("%s", s) != -1) { num = flag = 0; if(s[0] == '0') p[num].x = 0, p[num++].y = 0, map[0][0] = 0; else map[0][0] = s[0] - '0'; for(i = 0; i < 9; i++) for(j = 0; j < 9; j++) if(i || j) { scanf("%s", s); if(s[0] == '0') p[num].x = i, p[num++].y = j, map[i][j] = 0; else map[i][j] = s[0] - '0'; } dfs(0); if(t++) printf("\n"); for(i = 0; i < 9; i++) { for(j = 0; j < 8; j++) printf("%d ", map[i][j]); printf("%d\n", map[i][8]); } } return 0; }