都可以从COGS上找到

纵横字谜krizaljka

时间限制: 1 Sec  内存限制: 32 MB

题目描述

给出两个单词,找到第一个相同的字母,然后第一个单词横数输出,第二个竖着输出形成十字形。

如果两个单词有多个位置的字母相同,则先考虑在第一个单词中位置靠前的相同字母。

例如,第一个单词是 “ABBA”,第二个单词是 “CCBB",形成的纵横字谜格式为:

.C..
.C..
ABBA
.B..

输入

1行:2个空格分开的单词AB,长度均不超过30个字符。

输出

A长度为MB长度为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;
}
毫无意义的代码

相关文章:

  • 2021-12-12
  • 2021-10-05
  • 2021-10-02
  • 2021-11-11
  • 2022-01-10
  • 2021-12-06
  • 2022-02-02
  • 2021-11-27
猜你喜欢
  • 2021-10-22
  • 2021-07-01
  • 2022-01-18
  • 2021-10-24
  • 2021-05-19
  • 2021-10-17
  • 2022-03-04
相关资源
相似解决方案