A 输入一个数组,数组元素只能交换一次,求最大值与最小值之间的最大距离。(后来才发现看题目不认真,最小值为1,最大值为n...)
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int num[110]; int main() { int n; while(cin>>n) { int mmax=-1,mmin=10,maxflag=-1,minflag=-1; memset(num,0,sizeof(num)); for(int i=0;i<n;i++) { cin>>num[i]; } for(int i=0;i<n;i++) { if(num[i]>mmax) { mmax=num[i]; maxflag=i; } if(num[i]<mmin) { mmin=num[i]; minflag=i; } } int temp=max(max(n-1-minflag,max(minflag,maxflag)),n-1-maxflag); cout<<temp<<endl; } return 0; }
B 模拟(这道题疑惑的是double的问题,总觉得迟早会在精度上吃亏,所以一开始想着放大对应倍数...)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; double glass[15][15]; int main() { int n,t; while(~scanf("%d%d",&n,&t)) { memset(glass,0,sizeof(glass)); glass[1][1]=t; int cnt=0; for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { if(glass[i][j]>=1) cnt++; if(glass[i][j]>1) { glass[i+1][j]+=(glass[i][j]-1)/2; glass[i+1][j+1]+=(glass[i][j]-1)/2; } } } printf("%d\n",cnt); } return 0; }
时间: 2024-10-04 06:52:21