1160題 排序
水題一個,小弟初次試水,求大神幫忙檢查代碼,為啥就是AC不了。。。感覺已經考慮了所有情況
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<string>
using namespace std;
void BubbleSort(long long* pData, int count)
{
long long temp;
for (int i = 1; i < count; i++)
{
for (int j = count - 1; j >= i; j--)
{
if (pData[j] < pData[j - 1])
{
temp = pData[j - 1];
pData[j - 1] = pData[j];
pData[j] = temp;
}
}
}
}
//所有情形列舉如下:
//(1)輸入數字串中有若干個5且以5結尾
//(2)輸入數字串中沒有一個5,即總共就只有一個數
//(3)輸入數字串最后一位不是5
//(4)輸入數字串第一個數就是5
//(5)輸入數字串連續出現5
//它們之間還可互相組合
int main()
{
string s;
int i = 0;
int j = 0;
while(cin>>s)
{
int n = s.length();
char *c = new char[n];
char *f = new char[n];
int count = 0;
//length()函式到到第一個空格截止,記錄的是字串的有效長度(到結束符為止)
for(i=0;i<n;i++)
{
while(s[i]=='5')//處理連續的5
{
c[i] = ' ';
f[i] = ' ';
i++;
}
if(c[i-1]==' ')//保證count在連續的5中只記錄一個5,即count+1
{
count++;
c[--i] = '1';
continue;//跳出本層for回圈
}
c[i] = s[i];//否則執行一對一賦值
f[i] = s[i];
}//回圈結束,中間陣列c只是為了記錄5的個數,
//目標陣列f完全接收字串s的內容且把5轉化為空格
//count實際記錄的是5出現的組數
if((f[0]!=' ')&&(f[n-1]!=' ')&&(count!=0))count++;//首尾都不是5,但是中間有5
if(count==0)count = 1;//根本沒有5,只有一個不含5的數字串
if((f[0]==' ')&&(f[n-1]==' '))count--;//首尾全是5
//經過上述處理后,count實際上變成是原數字串被分隔成的子串個數
// for(i=0;i<n;i++)
// cout<<f[i];
// cout<<endl;
char **ch = new char*[count];
for(i=0;i<count;i++)
ch[i] = new char[10];//每個數最大,輸入資料保證不超過100000000九位數,留一個給結束符'/0'
//需要把陣列f中以空格分開的字串分別存盤到陣列ch里
int k = 0;//字符賦值開始的起點
for(i=0;f[i]==' ';i++)
k++;
//原數字串開頭連續幾個5,字符賦值就應該跳過這幾個5
for(i=0;i<count;i++)//遍歷每一行
for(j=0;j<9;j++)//每個數字最大為100000000,9位,遍歷每一列,實際上就是遍歷每一個子串將要存盤的位置
{
if(k<n)
{
if(f[k]==' ')
//事實上,當第一個數字就是5時,這直接跳過了第一個數字串啊,在第一個數字不是5時都是適用的
{
k++;
while(f[k]==' ')
k++;
break;
//跳出本輪for回圈,在f[]中也跳過若干個空格即完成這一行的字串輸入
}
else//f[k]!=' '
ch[i][j] = f[k++];
}
}
long long *stringtoint = new long long[count];
for(i=0;i<count;i++)
stringtoint[i] = atoi(ch[i]);
BubbleSort(stringtoint,count);
for(i=0;i<count;i++)
{
if(i<count-1)
cout<<stringtoint[i]<<" ";
else
cout<<stringtoint[i]<<endl;
}
}
return 0;
}
uj5u.com熱心網友回復:
題目送上Problem Description
輸入一行數字,如果我們把這行數字中的‘5’都看成空格,那么就得到一行用空格分割的若干非負整數(可能有些整數以‘0’開頭,這些頭部的‘0’應該被忽略掉,除非這個整數就是由若干個‘0’組成的,這時這個整數就是0)。
你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。
Input
輸入包含多組測驗用例,每組輸入資料只有一行數字(數字之間沒有空格),這行數字的長度不大于1000。
輸入資料保證:分割得到的非負整數不會大于100000000;輸入資料不可能全由‘5’組成。
Output
對于每個測驗用例,輸出分割得到的整數排序的結果,相鄰的兩個整數之間用一個空格分開,每組輸出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/101649.html
上一篇:基于windows API 的基于表單、訊息回圈、事件驅動的 Windows C語言風格的Windows 程式實驗報告
下一篇:妖哥幫忙
