T-1037(周新婷)
A-有序序列合并
将两个升序序列输入再合并为一个有序序列输出。只需将两个升序序列放入在一个数组中,进行快速排序进行排序即可。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int main() { int n,m,a[1000],b[1000],i,c[2000]; cin>>n>>m; for(i=0;i<n;i++) { cin>>a[i]; c[i]=a[i]; } for(i=0;i<m;i++) { cin>>b[i]; c[n+i]=b[i]; } sort(c,c+m+n); for(i=0;i<m+n;i++) printf("%d ",c[i]); return 0; }B-Dragon
目的就是将多组四个数据进行从大到小的排序(不包括前导0)。利用while实现多组数据输入输出,利用选择排序对数据进行排序再输出即可(注意利用if来排除如果是前导0则输出0)。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int main() { int a,b,c,d,i,j; while(cin>>a>>b>>c>>d) { int h[4]; h[0]=a,h[1]=b;h[2]=c,h[3]=d; for(int i=0;i<4;i++) { int maxV=h[i]; for(int j=i+1;j<4;j++) { if(maxV<h[j]) swap(maxV,h[j]); } h[i]=maxV; if(h[0]==0) {printf("0");break;} printf("%d",h[i]); } printf("\n"); } }C-花样方阵
首先输入T确定输入几组数据,利用while控制循环次数,将同学的位置坐标放入到二维数组中,利用for循环输入一行数据并计算一行数据,将计算得到的时间存入新的数组中,对最后得到的新数组进行快速排序,但只输出最后一个数。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<math.h> using namespace std; int main() { int T,n,i,j,t[n]; cin>>T; while(T--) { cin>>n; int h[n][4],t[n]; for(i=0;i<n;i++) { for(j=0;j<4;j++) cin>>h[i][j]; t[i]=fabs(h[i][0]-h[i][2])+fabs(h[i][1]-h[i][3]); } sort(t,t+n); printf("%d\n",t[n-1]); } return 0; }E-小H和迷宫
将百分比数放入到数组中进行快速排序排除大小,要使怪兽血量损失最多,则将总乘最大百分比(剩余药品中)。每次削减的血量总用double型表示,计算剩余血量进行强制转换取整。最终利用总血量减去第三次剩余的血量输出即可。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int main() { int N,a,b,c; cin>>N>>a>>b>>c; int h[3]={a,b,c}; //把a,b,c放进数组进行排序 sort(h,h+3); //从小到大排序然后倒着乘 double w1=N*1.0*h[2]/100.0; //第一次削减的血量=总血量*最大百分比,取整 int w11=(double)N-w1; //第一次剩余的血量=总血量-第一次削减的血量,取整 double w2=w11*1.0*h[1]/100.0; //第二次削减的血量=第一次剩余的血量*倒二百分比,取整 int w22=(double)w11-w2; //第二次剩余的血量=第一次剩余的血量-第二次削减的量,取整 double w3=w22*1.0*h[0]/100.0; //第三次削减的血量=第二次剩余的血量*最小百分比,取整 int w33=(double)w22-w3; //第三次剩余的血量=第二次剩余的血量-第三次削减的血量,取整 printf("%d\n",N - w33); return 0; }
,