5. 已知輸入序列中各元素的值至少有兩個元素。設計演算法求出該序列中元素的所有最大升、降子序列。例如,若元素依次為(1,20,30,12,3,5,7,4,6,100,11,8),則輸出結果為(1,20,30),(30,12,3),(3,5,7),(7,4),(4,6,100),(100,11,8)。
uj5u.com熱心網友回復:
給你個思路,很簡單的。你用一個陣列保存所有的資料。然后從第一個開始,如果下一個是升序(就是比當前的大),那么一直找比當前大的。如果下一個是小的,則結束查找。輸出結果。下次查找以上一次最后的數字繼續。降序是一樣的操作。uj5u.com熱心網友回復:
十塊錢,大佬可以幫我做出來嗎?
uj5u.com熱心網友回復:
拜托了


uj5u.com熱心網友回復:
for exampleint main(int argc, const char * argv[]) {
int a[] = {1, 20, 30, 12, 3, 5, 7, 4, 6, 100, 11, 8};
int len = sizeof(a)/sizeof(int);
int *p = (int*)malloc(sizeof(a));
int i, j=0, k=0;
p[j++] = a[0];
for (i=1; i<len; i++) {
if (a[i-1]<=a[i] && !k) { //保持升序的時候
p[j++] = a[i];
} else if (a[i-1]>=a[i] && k) { //保持降序的時候
p[j++] = a[i];
} else { //升序或降序被破壞的時候
if (j>0) { //如果有資料則輸出
printf("(");
for (int m=0; m<j-1; m++) {
printf("%d, ", p[m]);
}
printf("%d), ", p[j-1]);
}
j=0;
p[j++] = a[--i];
k = !k; //改變升序或降序的方向
}
}
if (j>0) { //如果有資料則輸出
printf("(");
for (int m=0; m<j-1; m++) {
printf("%d, ", p[m]);
}
printf("%d)\n", p[j-1]);
}
free(p);
return 0;
}
uj5u.com熱心網友回復:
大佬有qq嗎?
uj5u.com熱心網友回復:
加我qq吧1606681676
uj5u.com熱心網友回復:
int nArray[] = {1,20,30,12,3,5,7,4,6,100,11,8};
int nCount = sizeof(nArray)/sizeof(int);
int nOrder = 0;
for(int i=0; i<nCount-1; i++)
{
if (nOrder == 0)
{
if (nArray[i+1] >= nArray[i])
{
nOrder = 1;
}
else
{
nOrder = 2;
}
printf("%d %d", nArray[i], nArray[i+1]);
}
else if (nOrder == 1)
{
if (nArray[i+1] < nArray[i])
{
printf("\n");
nOrder = 0;
--i;
continue;
}
printf(" %d", nArray[i+1]);
}
else
{
if (nArray[i+1] >= nArray[i])
{
printf("\n");
nOrder = 0;
--i;
continue;
}
printf(" %d", nArray[i+1]);
}
}
printf("\n");
uj5u.com熱心網友回復:
不要錢。下面有代碼,自己研究明白了。
uj5u.com熱心網友回復:
給錢給錢。。。
加我qq吧1606681676
QQ已經不用很多年了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/115979.html
標籤:C++ 語言
上一篇:PHP學習
下一篇:C++編輯外部檔案的問題

