【题解】WebGoC 100088.抽签

【题解】WebGoC 100088.抽签
题目描述信奥班准备采用随机抽签的方式奖励同学们来一次“江南行”研学队伍在希沃白板上按顺序随机生成n个数依序分给n个同学。当有多个同学获取到同一个数时只有第一个抽到的同学才能加入研学队伍。请你按原顺序去除无缘参加研学的同学以抽取的数为高、20为宽画一个矩形矩形间隔为10。同时将这些数降序排序以它们相应的排序序号%16作为矩形的颜色编号。此外在最大值上面画一个1号颜色、半径为10的实心圆在最小值上面画一个3号颜色、半径为10的实心圆。输入格式第1行一个整数n 2n25第2行n个整数数据范围为[20,600],数据保证最大值和最小值不是同一个数。输出格式相应的图形输入/输出例子1输入5100 120 110 100 130输出输入/输出例子2输入8150 120 120 160 110 100 100 150输出样例解释样例1第4个同学因为跟第1个同学抽到相同数100不能参加研学。能参加研学所抽取的数依序为 100、 120 、110 、130按降序排序后相应的序号为 4、2、3、1。参考答案int main() { int n; cin n; int a[25]; for (int i 0; i n; i) { cin a[i]; } int uni[25]; int unilen 0; for (int i 0; i n; i) { bool exist false; for (int j 0; j unilen; j) { if (uni[j] a[i]) { exist true; break; } } if (!exist) { uni[unilen] a[i]; } } int desc[25]; for (int i 0; i unilen; i) desc[i] uni[i]; for (int i 0; i unilen - 1; i) { for (int j 0; j unilen - 1 - i; j) { if (desc[j] desc[j1]) { int t desc[j]; desc[j] desc[j1]; desc[j1] t; } } } int rank[25]; for (int i 0; i unilen; i) { for (int j 0; j unilen; j) { if (desc[j] uni[i]) { rank[i] j 1; break; } } } int maxv desc[0]; int minv desc[unilen - 1]; p.up().speed(10).moveTo(-350,-350); for(int i0;iunilen;i) { p.fd(uni[i]/2.0).rr(20,uni[i],rank[i]%16); if(uni[i]maxv) { p.fd(uni[i]/2.010).oo(10,1); p.bk(uni[i]/2.010); } if(uni[i]minv) { p.fd(uni[i]/2.010).oo(10,3); p.bk(uni[i]/2.010); } p.bk(uni[i]/2.0).rt(90).fd(30).lt(90); } p.hide(); return 0; }题目链接https://v1.51goc.com/question/viewProgram/100088进去后要登录