2024.4.17
#include<stdio.h>
void f(int num,double *arr,double *ave,double *dif){
double max=arr[0];
double min=arr[0];
int MAX_SIZE=0;
int MIN_SIZE=0;
for(int i=0;i<num;i++){
if(max<=arr[i]) {
max=arr[i];
MAX_SIZE=i;
}
if(min>=arr[i]){
min=arr[i];
MIN_SIZE=i;
}
}
double sum=0.0;
for(int i=0;i<num;i++){
if(i!=MAX_SIZE&&i!=MIN_SIZE){
sum+=arr[i];
//printf("%lf ",sum);
}
}
(*ave)=sum/(num-2);
double max_2=arr[MAX_SIZE+1];
double min_2=arr[MIN_SIZE-1];
for(int i=0;i<num;i++){
if(i!=MAX_SIZE&&i!=MIN_SIZE){
if(max_2<=arr[i]) max_2=arr[i];
if(min_2>=arr[i]) min_2=arr[i];
}
}
double dif_1=0.0;
double dif_2=0.0;
dif_1=max_2-(*ave);
dif_2=(*ave)-min_2;
if(dif_1>=dif_2) (*dif)=dif_1;
if(dif_1<dif_2) (*dif)=dif_2;
}
int main(){
int num=0;
double arr[301];
double ave=0,dif=0;
scanf("%d",&num);
if(num<=2||num>300) return 0;
for(int i=0;i<301;i++){
arr[i]=0;
}
for(int i=0;i<num;i++){
scanf("%lf",&arr[i]);
if(arr[i]<0) return 0;
}
f(num,arr,&ave,&dif);
printf("%.2lf %.2lf",ave,dif);
return 0;
}
以上为洛谷关于白细胞的题,经过我的坚持不懈,终于“暴力”解出来了,真的不得不佩服我写编程代码的那种感觉!!!
#include<stdio.h>
void get_new_arr(int num_1,int num_2,int arr[101][101],int brr[101][101]){
for(int i=0;i<num_1;i++){
for(int j=0;j<num_2;j++){
brr[j][i]=arr[i][j];
}
}
}
int main(){
int num_1=0;
int num_2=0;
int arr[101][101];
int brr[101][101];
scanf("%d%d",&num_1,&num_2);
for(int i=0;i<101;i++){
for(int j=0;j<101;j++){
arr[i][j]=0;
brr[i][j]=0;
}
}
for(int i=0;i<num_1;i++){
for(int j=0;j<num_2;j++){
scanf("%d",&arr[i][j]);
}
}
get_new_arr(num_1,num_2,arr,brr);
for(int i=0;i<num_2;i++){
for(int j=num_1-1;j>=0;j--){
printf("%d ",brr[i][j]);
}
printf("\n");
}
return 0;
}
上述题为洛谷关于图像旋转的题,是根据上一题来推进的,我以为要改变算法问题,但后来发现只要改变输出就可以了!幡然醒悟!!!