題目摘自網友發的2018阿里巴巴在線編程題
輸入數據n(n>=6)代表n個數,從0-9任意輸入n個數,然後在n個數選出6個數xx-xx-xx表示 時:分:秒,求出最小時間和最大時間,若時間無效,則輸出時間無效
例如: 輸入: 6 6 5 4 3 2 1
輸出: 123456 235641
輸入: 6 9 9 9 9 9 9 輸出: 時間無效
結題思路
因爲輸入數字限定爲0-9,記錄每個數字的輸入次數,根據需求取出最大或者最小的數,每取出一個數,對應數字的出現次數減1
main函數
int main(int argc, char *argv[])
{
int num;
cin >> num;
if (num < 6)
{
cout << "Input num must be greater than 6" << endl;
system("pause");
return 0;
}
int data[10] = { 0 };
int data2[10] = { 0 };
int tmp;
for (int i = 0; i < num; i++)
{
cin >> tmp;
data[tmp]++;
}
memcpy(data2, data, 10 * sizeof(int));
cout << "min time is:";
int ret = 1;
ret &= output(data, 0, 2);
ret &= output(data, 0, 3);
ret &= output(data, 0, 5);
ret &= output(data, 0, 9);
ret &= output(data, 0, 5);
ret &= output(data, 0, 9);
if (ret == 0)
{
cout << endl << "invalid input" << endl;
system("pause");
return -1;
}
// max time
cout << "max time is:";
ret = 1;
ret &= output(data2, 2, 0);
ret &= output(data2, 3, 0);
ret &= output(data2, 5, 0);
ret &= output(data2, 9, 0);
ret &= output(data2, 5, 0);
ret &= output(data2, 9, 0);
if (ret == 0)
{
cout << endl << "invalid input" << endl;
system("pause");
return -1;
}
cout << endl;
system("pause");
}
輸出函數
int output(int* pVal, int start, int end)
{
if (start <= end)
{
for (int i = start; i <= end; i++)
{
if (pVal[i] > 0)
{
cout << i;
pVal[i]--;
return 1;
}
}
}
else
{
for (int i = start; i >= end; i--)
{
if (pVal[i] > 0)
{
cout << i;
pVal[i]--;
return 1;
}
}
}
return 0;
}