首页 > 代码库 > 小白书训练-Where's Waldorf?
小白书训练-Where's Waldorf?
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=951
题意:给了一个字母表,然后给了若干单词,问这些单词的首地址在字母表的什么地方。
因为可以八个顺序查找,比较麻烦,但不难,之前就做个,这次在做,改进就是用数组+循环控制八个方向,而不是写了好多各个方向的代码。
代码:
#include<iostream> #include<stdio.h> #include<string.h> #include<ctype.h> using namespace std; int x[8] = {1,1,0,-1,-1,-1,0,1}; int y[8] = {0,-1,-1,-1,0,1,1,1}; int m,n; char s[50][50]; char sk[50]; int ok(int ix,int iy) { for(int i = 0;i < 8;i++) { char *p = sk; int j,k; for(j = ix,k = iy;(j >= 0 && j < n)&&(k >= 0 && k < m)&&*p != '\0';j += x[i],k += y[i],p++) { if(*p != s[j][k]) break; } if(*p == '\0') { return 1; } } return 0; } void find() { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(ok(i,j)) { printf("%d %d\n",i+1,j+1); return; } } } } int main() { int N; cin >> N; while(N--) { cin >> n >> m; for(int i = 0;i < n;i++) cin >> s[i]; //zhuan huan wei xiao xie for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { s[i][j]=tolower(s[i][j]); } } int t; cin >> t; for(int i = 0;i < t;i++) { cin >> sk; int len = strlen(sk); for(int j = 0;j < len;j++) sk[j] = tolower(sk[j]); find(); } if(N) cout << endl; } return 0; }
梦续代码:http://www.hypo.xyz
小白书训练-Where's Waldorf?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。