都可以从COGS上找到
纵横字谜(krizaljka)
时间限制: 1 Sec 内存限制: 32 MB
题目描述
给出两个单词,找到第一个相同的字母,然后第一个单词横数输出,第二个竖着输出形成十字形。
如果两个单词有多个位置的字母相同,则先考虑在第一个单词中位置靠前的相同字母。
例如,第一个单词是 “ABBA”,第二个单词是 “CCBB",形成的纵横字谜格式为:
.C..
.C..
ABBA
.B..
输入
第1行:2个空格分开的单词A和B,长度均不超过30个字符。
输出
令A长度为M,B长度为N,则输出共M行,每行N个字符。A单词橫着输出,B单词竖着输出。不是单词字母的位置填充句点'.'
样例输入
REPUBLIKA HRVATSKA
样例输出
H........
REPUBLIKA
V........
A........
T........
S........
K........
A........
Solution
考点:是否会编程
随便枚举,然后随便输出
Code
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; void Freopen() {freopen("krizaljka.in","r",stdin); freopen("krizaljka.out","w",stdout);} void Fclose() {fclose(stdin); fclose(stdout);} char s1[40],s2[40]; char S[40][40]; int main() { Freopen(); scanf("%s",s1+1),scanf("%s",s2+1); int ls1=strlen(s1+1),ls2=strlen(s2+1); int p1=0,p2=0; for (int i=1; i<=ls1; i++) for (int j=1; j<=ls2; j++) if (s2[j]==s1[i] && !p1 && !p2) {p1=i,p2=j;} for (int i=1; i<=ls2; i++) for (int j=1; j<=ls1; j++) S[i][j]='.'; for (int i=1; i<=ls1; i++) S[p2][i]=s1[i]; for (int j=1; j<=ls2; j++) S[j][p1]=s2[j]; for (int i=1; i<=ls2; i++) { for (int j=1; j<=ls1; j++) putchar(S[i][j]); if (i!=ls2) puts(""); } Fclose(); return 0; }