トピック:
「666」はインターネット用語です。これはおそらく、誰かが非常に強力であり、私たちがそれを賞賛していることを意味します。最近、別の数字「9」が導き出されました。これは「6がひっくり返った」という意味で、強力すぎます。これが最高の偉大な状態だと思うなら、あなたは間違っています。現在の最高の状態は、3「9」であるため、数字の「27」です。
この質問では、一連の「6666...6」でのみ賞賛を表現する古い文を最新の高度な表現に翻訳するプログラムを作成するように求められます。
入力フォーマット:
入力すると、1行に文が表示されます。つまり、1000以下の英字、数字、スペースで構成され、キャリッジリターンで終了する空でない文字列です。
出力フォーマット:
入力文を左から右にスキャンします。文に連続する6が3つ以上ある場合は、連続する6を9に置き換えます。ただし、連続する6が9つ以上ある場合は、連続する6を27に置き換えます。その他のコンテンツは影響を受けず、そのまま出力されます。
入力サンプル:
それはとても666です本当に6666私は他に何を言うことができますか66666666666
サンプル出力:
それはとても666です本当に9他に何を言うことができますか27
14ポイントコード:
#include <bits/stdc++.h>
#define debug(x) cout<<#x<<":"<<x<<endl;
#define f(i,a,n) for(int i=a;i<n;++i)
#define ff(i,a,n) for(int i=a;i<=n;++i)
const int INF=0x3f3f3f3f;
using namespace std;
typedef long long ll;
//
string s;
int main(){
getline(cin,s);
int num=0;
s+='a';
f(i,0,s.length()){
if(s[i]=='6')num++;
else{
if(num>9)s.replace(i-num,num,"27");
else if(num>3)s.replace(i-num,num,"9");
num=0;
}
}
s.erase(s.end()-1);
cout<<s<<endl;
return 0;
}
間違った理由:
f(i,0,s.length())
問題があります、replace
投稿でs.length()
は、変更されます
エラーの例:
入力:
666666666 6666 7
エラー出力:
9 6666 7
正しい出力:
9 9 7
15ポイントコード:
#include <bits/stdc++.h>
#define debug(x) cout<<#x<<":"<<x<<endl;
#define f(i,a,n) for(int i=a;i<n;++i)
#define ff(i,a,n) for(int i=a;i<=n;++i)
const int INF=0x3f3f3f3f;
using namespace std;
typedef long long ll;
//
string s;
int main(){
getline(cin,s);
s=s+'q';
int cnt=0;
for(int i=0;i<s.length();i++){
if(s[i]!='6'){
if(cnt>9){
cout<<"27";
}
else if(cnt>3){
cout<<"9";
}
else {
f(j,0,cnt)cout<<6;
}
if(i!=s.length()-1)cout<<s[i];
cnt=0;
}
else{
cnt++;
}
}
return 0;
}