problem description
對於包含n(1<=n<=1000)個整數的序列,對於序列中的每一元素,在序列中查詢其位置之後第乙個大於它的值,如果找到,輸出所找到的值,否則,輸出-1。
input
輸入有多組,第一行輸入t(1<=t<=10),表示輸入的組數;
以後是 t 組輸入:每組先輸入n,表示本組序列的元素個數,之後依次輸入本組的n個元素。
output
輸出有多組,每組之間輸出乙個空行(最後一組之後沒有);
每組輸出按照本序列元素的順序,依次逐行輸出當前元素及其查詢結果,兩者之間以-->間隔。
sample input
2sample output4 12 20 15 18
5 20 15 25 30 6
12-->20hint20-->-1
15-->18
18-->-1
20-->25
15-->25
25-->30
30-->-1
6-->-1
本題的資料量小、限時要求低,可以不用棧來完成。
方法一:利用棧來完成
#include
#include
#define stackmax 10000
#define stacknum 10000
typedef int elemtype;
typedef struct
sqstack;
void initstack(sqstack *s)
//棧的初始化
void push(sqstack *s,int e)
*(s->top)=e;
s->top++;
}//入棧操作
int pop(sqstack *s)
//出棧操作
void f(sqstack *s)
}if(f==0) printf("%d-->%d\n",*i,-1);//在給定數值之後沒有更大的數值}}
int main()
//將題目所給給的資料入棧
f(&s);//進行比較
if(t!=0) printf("\n");//若非最後一組,多輸出一行空格,要注意判斷是否為最後一組的條件是t是否為零,而不是一
}return 0;
}方法二:利用陣列來完成
#include
#include
int a[1010],b[1010];
int main()
//輸入資料,並把它存在乙個陣列裡
for(int i=1;i<=top;i++)
//進行數值上的比較,判斷是否有更大值,如果有,則把數值存在另乙個陣列裡,便與輸出
}if(f==0)b[++top1]=-1;//若沒有,則把-1存在另一陣列裡
}for(int i=1;i<=top;i++)
//按格式輸出兩個陣列
if(j!=t)printf("\n");//若不是最後一組資料,要多輸出一行空格
}return0;}
棧之資料結構實驗之棧與佇列五 下一較大值(一)
資料結構實驗之棧與佇列五 下一較大值 一 time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 對於包含n 1 n 1000 個整數的序列,對於序列中的每一元素,在序列中查詢其位置...
資料結構實驗之棧與佇列五 下一較大值(一)
time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 對於包含n 1 n 1000 個整數的序列,對於序列中的每一元素,在序列中查詢其位置之後第乙個大於它的值,如果找到,輸出所找到...
資料結構實驗之棧與佇列五 下一較大值(一)
description 對於包含n 1 n 1000 個整數的序列,對於序列中的每一元素,在序列中查詢其位置之後第乙個大於它的值,如果找到,輸出所找到的值,否則,輸出 1。input 輸入有多組,第一行輸入t 1 t 10 表示輸入的組數 以後是 t 組輸入 每組先輸入n,表示本組序列的元素個數,之...