P7765 KRIŽALJKA 题解
原题:P7765 [COCI 2011/2012 #5] KRIŽALJKA
思路:
1.输入
定义两个 char 类型字符串,用 scanf 读入 (注:scanf 遇到空格、回车和 Tab 键都会认为输入结束)。
char a[100001],b[100001];
scanf("%s",a);
scanf("%s",b);
2.记录
可以用两层 for 循环。如果找到第一个相同字母出现的位置以及字母,记录下,然后跳出第二层循环。
for(int i=la-1;i>=0;i--){
for(int j=0;j<lb;j++){
if(a[i]==b[j]){
num_a=i;
num_b=j;//记录相同字母的位置
ta=a[i];
tb=b[j];//记录相同字母
break;
}
}
}
这里需要注意:外层循环对
3.输出
外层循环
for(int j=0;j<lb;j++){
if(j==num_b){
for(int k=0;k<=la;k++){
cout<<a[k];
}
}
else for(int i=0;i<la;i++){
if(i!=num_a){
cout<<".";
}
else if(i==num_a){
cout<<b[j];
}
}
cout<<endl;
}
最后附上完整
#include<bits/stdc++.h>
using namespace std;
char a[100001],b[100001];
int main()
{
scanf("%s",a);
scanf("%s",b);
int la=strlen(a),lb=strlen(b),num_a,num_b;
char ta,tb;
for(int i=la-1;i>=0;i--){
for(int j=0;j<lb;j++){
if(a[i]==b[j]){
num_a=i;
num_b=j;//记录相同字母的位置
ta=a[i];
tb=b[j];//记录相同字母
break;
}
}
}
for(int j=0;j<lb;j++){
if(j==num_b){
for(int k=0;k<=la;k++){
cout<<a[k];
}
}
else for(int i=0;i<la;i++){
if(i!=num_a){
cout<<".";
}
else if(i==num_a){
cout<<b[j];
}
}
cout<<endl;
}
return 0;
}
这是本蒟蒻的第二篇题解,如有不当之处请指出。只会用n方的代码做了。