藍橋杯基礎練習-數列排序C 和 時間轉換
阿新 • • 發佈:2021-01-24
技術標籤:藍橋杯
一、排序
1、冒泡:
#include<stdio.h> int main() { unsigned int n,i,j,t; scanf("%d",&n); int P[n]; for(i=0;i<=n-1;i++) { scanf("%d",&P[i]); } for(j=n;j>=1;j--) { for(i=0;i<j-1;i++) if(P[i]>P[i+1]) { t=P[i+1]; P[i+1]=P[i]; P[i]=t; } } for(i=0;i<=n-1;i++) { printf("%d",P[i]); printf(" "); } return 0; }
2、快排
#include <stdio.h> int a[10000],n;//定義全域性變數,這兩個變數需要在子函式中使用 void quicksort(int left,int right) { int i,j,t,temp; if(left>right) return; temp=a[left]; //temp中存的就是基準數 i=left; j=right; while(i!=j) { //順序很重要,要先從右往左找 while(a[j]>=temp && i<j) j--; //再從左往右找 while(a[i]<=temp && i<j) i++; if(i<j) { //當哨兵i和哨兵j沒有相遇時 t=a[i]; a[i]=a[j]; a[j]=t; } } a[left]=a[i]; a[i]=temp; quicksort(left,i-1);//繼續處理左邊的,這裡是一個遞迴的過程 quicksort(i+1,right);//繼續處理右邊的,這裡是一個遞迴的過程 } int main() { int i,j,t; //讀入資料 scanf("%d",&n); for(i=1; i<=n; i++) scanf("%d",&a[i]); quicksort(1,n); //快速排序呼叫 //輸出排序後的結果 for(i=1; i<=n; i++) printf("%d ",a[i]); return 0; }
#我的快排,居然報超時!!!
#include <stdio.h> void quickSort(int arr[], int low, int high) { int first = low; //第一個元素的下標 int last = high; //最後一個元素的下標 int key = arr[first]; if(low >= high) return; while(first < last) //實現多次交換,使key去到它應在的位置 { while(first < last && arr[last] > key) //實現一次交換 { last--; } arr[first] = arr[last]; while(first < last && arr[first] < key) { first++; } arr[last] = arr[first]; } arr[first] = key; quickSort(arr, low, first-1); //此first不是first,是key應在的位置 quickSort(arr, first+1, high); } int main() { int n,i; scanf("%d",&n); int a[n]; for(i = 0; i < n; i++) scanf("%d",&a[i]); quickSort(a, 0, n-1); for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); return 0; }
原因: while(first < last && arr[last] > key) //實現一次交換 和 while(first < last && arr[first] < key) 未考慮等於的情況,當陣列中出現兩個相同的數是,while死迴圈,自然就超時了。
二、時間轉換:
1、
#include<stdio.h>
int main()
{
int a,b,c,d;
scanf("%d",&a);
b=(int)(a/3600);
c=(int)(a%3600)/60;
d=(int)(a%3600)%60;
printf("%d:%d:%d",b,c,d);
return 0;
}
2、我的
int main(){
int t;
scanf("%d",&t);
int h = t/3600;
int m = (t-h*3600)/60;
int s = t-h*3600-m*60;
char A[11];
char a[1] = {'<'};
char b[2] = {'>',':'};
// char b[2] = {'<',h,'>',':','<',m,'>',':','<',s,'>'};
printf("%d %d %d\n",h,s,m);
sprintf(A, "%s%d%s%s%d%s%s%d%s",a, h, b,a, m, b,a, s, b);
printf("%s",a);
return 0;
}
輸出居然是這樣的,有問題!!!