WA#4,6,7,9求解

P1098 [NOIP2007 提高组] 字符串的展开

代码中存在几个问题,特别是在处理逆序填充时。让我们逐一解决这些问题: 逆序填充逻辑:在当前代码中,逆序填充的逻辑没有正确实现。特别是,当 p3 == 2 时,逆序填充的逻辑应该从 end 递减到 start。 内层循环变量名冲突:内层填充循环中的变量 i 与外层循环的变量 i 冲突。我们需要为内层循环使用不同的变量名。 字符递增递减处理:在逆序和正序填充时,字符递增递减的处理需要根据字符是数字还是字母来决定。 星号填充:星号填充逻辑是正确的,不需要修改。 帮你改好了: ```cpp #include<bits/stdc++.h> using namespace std; int main(){ int p1,p2,p3;cin>>p1>>p2>>p3; string a;cin>>a; cout<<a[0]; for(int i=1;i<a.size();i++){ if(a[i]!='-'){ cout<<a[i];continue; } if(a[i-1]=='-'||a[i+1]=='-'){ cout<<"-";continue; } if(a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z'){ if(a[i-1]>=a[i+1]){ cout<<"-";continue; } char b=a[i-1],c=a[i+1]; if(p1<3){ if(p1==2)b=b-'a'+'A',c=c-'a'+'A'; if(p3==1){ for(int i=b+1;i<c;i++){ for(int z=0;z<p2;z++){ cout<<char(i); } } }else{ for(int i=c-1;i>b;i--){ for(int z=0;z<p2;z++){ cout<<char(i); } } } }else{ for(int i=b+1;i<c;i++){ for(int z=0;z<p2;z++){ cout<<"*"; } } } }else if(a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>='0'&&a[i-1]<='9'){/////// if(a[i-1]>=a[i+1]){ cout<<"-";continue; } if(p1==3){ for(int i=a[i-1]+1;i<a[i+1];i++){ for(int z=0;z<p2;z++){ cout<<"*"; } } }else{ //cout<<endl<<a[i-1]<<" "<<a[i+1]<<":"; char b1=a[i-1],b2=a[i+1]; for(int i=b1+1;i<b2;i++){ for(int z=0;z<p2;z++){ cout<<char(i); } } } }else{ cout<<"-"; } } return 0; } ``` [评测记录](https://www.luogu.com.cn/record/159445670)
by FearlessWarriors @ 2024-05-18 18:35:07


希望能帮到你
by FearlessWarriors @ 2024-05-18 18:35:23


``` #include <bits/stdc++.h> using namespace std; int p1, p2, p3; string s; int i = 0; bool is_equal(char a, char b) { if (isalpha(a) && isalpha(b) && islower(a) && islower(b))return true; else if (isdigit(a) && isdigit(b))return true; return false; } int main() { cin >> p1 >> p2 >> p3 >> s; while (s[i]) { char bc = s[i - 1], c = s[i], ac = s[i + 1]; if (c == '-' && is_equal(ac, bc) && ac > bc) { if (p3 == 1) { for (char j = bc + 1; j < ac; j ++ ) { char tmp = j; if (p1 == 2 && isalpha(j))tmp = toupper(j); else if (p1 == 3)tmp = '*'; for (int k = 1; k <= p2; k ++ )cout << tmp; } } else { for (char j = ac - 1; j > bc; j -- ) { char tmp = j; if (p1 == 2 && isalpha(j))tmp = toupper(j); else if (p1 == 3)tmp = '*'; for (int k = 1; k <= p2; k ++ )cout << tmp; } } } else { cout << c; } i ++; } return 0; } ``` 更短但思路不一样QAQ
by Dino_tang @ 2024-06-24 14:23:09


@[yi105011](/user/1241185)
by Dino_tang @ 2024-06-24 14:23:58


|