1 条题解
-
0
自动搬运
来自洛谷,原作者为

Liweiang
OIer:2020.11.30-2022.10.29|PhOer:2023.7-?搬运于
2025-08-24 22:32:53,当前版本为作者最后更新于2021-08-01 19:01:06,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
原题: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; } } }这里需要注意:外层循环对 数组的循环需要从后往前找,因为如果找到 等于 ,只跳出了第二层 for 循环,此时的 不是第一个出现的。
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方的代码做了。
- 1
信息
- ID
- 7049
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者