0
已解决
李显晨
中级启示者
中级启示者
错误代码WA10分
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<iomanip>
#include<algorithm>
#pragma GCC optimize(3)
using namespace std;
char a[10000050];
int main(){
string s="";
int n,i,j;
cin>>n;
for(int k=1;k<=n;k++) cin>>a[k];
i=1,j=n;
while(i<=j){
if(a[i]<a[j]){
s+=a[i];
i++;
}
else if(a[i]>=a[j]){
s+=a[j];
j--;
}
}
cout<<s;
return 0;
}
求大佬找错
李显晨在2021-03-09 17:49:40追加了内容
ding
李显晨在2021-03-09 18:54:15追加了内容
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<iomanip>
#include<algorithm>
#pragma GCC optimize(3)
using namespace std;
char a[10000050];
int cnt;
bool f(int i,int j){
if(a[i]>a[j]) return 1;
if(a[i]<a[j]) return 0;
while(a[i]==a[j]&&i<=j){
i++,j--;
}
if(a[i]>a[j]) return 1;
else return 0;
}
int main(){
int n,i,j;
cin>>n;
i=1,j=n;
while(i<=j){
if(f(i,j)){
cout<<a[j];
j--;
cnt++;
}
else{
cout<<a[i];
i++;
cnt++;
}
if(cnt%80==0) cout<<endl;
}
return 0;
}
哪错了?@汪凯恒
0
已采纳
汪恺恒
中级启示者
中级启示者
我们昨天的打卡题……
你的错误原因:如果a[i]不小于a[j],选a[j]不一定是最优解
核心部分,判断函数(选那一边的字符是最优解)
bool f(int i,int j){
if(s[i]>s[j]) return true; //如果s[i]字典序大,就选s[j]
if(s[i]<s[j]) return false;
while(s[i]==s[j]&&i<=j){
i++;
j--;
}
if(s[i]>s[j]) return true;
else return false;
}
之后再定义两个下标i和j,用while循环求解(注意,题目说每行最多输出80个字符。)
建议采用边循环边输出的方法
像这样
if( ){
cout<<s[j];
j--;
}else{
cout<<s[i];
i++;
}
每次输出cnt++,如果cnt%80==0,则输出endl
0