很久以前写过
这次希望大家资瓷一下~
首先这题的一个特点,就是牛文的单词和我们的English不一样,是有打乱顺序的,所以我们要记录一下牛文的每个字母的编号。
接着我们开始分析题目的输入数据。
因为牛唱的是字母歌,也就是我们的abcdef...................,所以假如在输入的第二个字符串中有存在一个下标为i的字符比下标为i-1的字符要小或相等,那就说明出错了,应该新建一次字母歌,因为从我们的角度考虑,你不可能唱到abcdefg,然后突然唱出一个a吧……所以我们就可以这样统计答案啦~
代码实现也很简短的~
#include <bits/stdc++.h>
using namespace std;
int a[30];
int main() {
for (int i = 1; i <= 26; i++) {
char ch; cin >> ch;
a[ch - 'a'] = i;
}
string s; cin >> s;
int ans = 1;
for (int i = 1; i < s.size(); i++) if (a[s[i] - 'a'] <= a[s[i - 1] - 'a']) {ans++; continue;}
printf("%d\n", ans);
return 0;
}
大佬们有什么宝贵建议可以评论区提出哦~谢谢!
注:肝到晚上十点半也不容易呀……
大家说我的“联系生活实际”好吗?
continue
貌似没有必要嗯嗯,谢谢
不懂就问这段代码为什么会WA
#include[HTML_REMOVED]
#include[HTML_REMOVED]
using namespace std;
const int N=1010;
char a[N],s[N];
int k=1,res=1;
int main()
{
cin>>a>>s
while(s[k]!=’\0’)
{
if((s[k]-‘a’)<=(s[k-1]-‘a’))res;
k
}
cout<<res<<endl;
return 0;
}
里面那个k是k=k+1
好,很好,非常好
亲那你这代码有问题,ans初始化应该是1
a哈迪,我太难了,写个题解都出了两个漏洞了……没事,我也是面对了这个bug好久的哈哈哈,
我这个题解可以扔到讨论区了,放在题解区就是个废物,两个漏洞啊……我还有脸面对给我点赞的童鞋们吗数组里存下的是字母的次序 的确是个好想法
a[s[i - 1] - 'a']
这玩意不会越界吗啊对对对,谢谢指正
名字很好,下次不要取了
你啥意思呀
hh,觉得你这名字有意思
贴下我的 slove() 吧
slove…
这个思路不错 👍,不过代码感觉可以优化 :
比如 ans 可以初始化为 1
然后 for(int i = 1;…) i 可以从 1 开始 , 然后 continue 是多余的 ,因为你后续也没有可执行代码…
%% 这里下标s[i-1]应该会越界吧
啊对对对,已修正谢谢
为什么我打了一个表,ans输出就成了2啊…
直接这样写确实是2欸,我把s整体右移了一位,从1开始遍历就不会错了
示例答案用cout输出ans等于2而printf输出等于3,想了好久。应该还是数组越界的问题。以后还是尽量避免这种问题。数组越界产生的问题在C++中是未定义的,会产生什么恶心的问题无法预料。
最sao的是printf输出正确而cout输出是错的
确实!好离谱,数组越界属实是人间迷惑了
啊对对对,已修正谢谢
那个下面的for循环不是会造成数组越界嘛,取到负一了欸
好啦
厉害啊,这题目太复杂了
叼
?