我自己写的读取代码(0分):
int arr[251]; //输入的数字
int res[251]; //结果数组
int res_i=0;
int k,n=0;
//数据读取
for(int i=0;i<251;i++)
{
char c;
scanf("%c",&c);
if(c==' '||c=='\n')break;
arr[i] = c-'0';
res[i] = 11; //arr数组中,每位最大不会超过10
n+=1; //计算个数
}
cin>>k;
看了题解后,抄题解的读取代码(AC):
int arr[251]; //输入的数字
int res[251]; //结果数组
int res_i=0;
int n,k;
char c[251];
scanf("%s%d",c,&k);
n=strlen(c);
for(int i=0;i<n;i++) { arr[i]=c[i]-'0';res[i] = 11; }
下载了测试点1的数据:“178543 4”,本地编译器和系统给的答案都为“13”,但是提交时,测试点1提示“wrong Answer On line 1 column 1,read 9,expexted 1”,不知道为什么会输出9。
(怎么想都不应该有9哇 w(゚Д゚)w )
猜测:
真的非常不会处理字符和字符串,不知道是怎么回事,求大佬救命!不想每次都要抄答案才能过 o(TヘTo)
完整代码如下(修修改改很多回,可能有很多冗余,见谅):
# include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[251]; //输入的数字
int res[251]; //结果数组
int res_i=0;
int n,k;
char c[251];
scanf("%s%d",c,&k);
n=strlen(c);
for(int i=0;i<n;i++) { arr[i]=c[i]-'0';res[i] = 11; }
// int arr[251]; //输入的数字
// int res[251]; //结果数组
// int res_i=0;
// int k,n=0;
// //数据读取
// for(int i=0;i<251;i++)
// {
// char c;
// scanf("%c",&c);
// if(c==' '||c=='\n')break;
// arr[i] = c-'0';
// res[i] = 11; //arr数组中,每位最大不会超过10
// n+=1; //计算个数
// }
// cin>>k;
k = n - k; //期望留下k个数字
if(k==0)return 0;
for(int i=0;i<n;i++) //遍历数据
{
// cout<<arr[i]<< " ";
if(res_i<k) //如果期望数据的个数没有达到,就添加
{
// printf("添加%d\n",arr[i]);
res[res_i] = arr[i];
res_i+=1;
}
//遍历已添加的数据,判断该数字是否小于其中的数字,如果小于并且后面的数据能够使期望数据完整,就替换(及后面)
for(int j=0;j<res_i;j++)
{
if(arr[i]<res[j] && (n - i)>=(k - j))
{
// printf("替换第%d位的%d为%d\n",j,res[j],arr[i]);
res[j]=arr[i];
res_i = j+1;
break;
}
}
}
//要返回一个正整数而不是数组拼接
long long int r = 0;
int flag = 0; //前导为0的处理
for(int i=0;i<k;i++)
{
while (i < k && res[i] == 0 && flag==0) { i++;flag = 1; }
if(res[i]!=0)flag = 1;
if(i>=k)break;
r = r*10+res[i];
}
cout<<r;
return 0;
}