關於我的“堅持不懈”和”幡然醒悟“

pengfu_xin發表於2024-04-17

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;
}
上述題為洛谷關於影像旋轉的題,是根據上一題來推進的,我以為要改變演算法問題,但後來發現只要改變輸出就可以了!幡然醒悟!!!

相關文章