2019年1月25日训练日志

今天看了快速排序
效率真的很高,但是总感觉不稳,虽然比冒泡强,但是保不齐某些情况下时间复杂度和冒泡一样。
让我一下子生撸这么多代码我是做不到的,还得多看多敲,培养强大的算法思维才行啊。

#include<iostream>
#include <cstdio>
#include <cmath>>
using namespace std;
#define N 6
int partition(int arr[], int low, int high){
    int key;
    key = arr[low];
    while(low<high){
        while(low <high && arr[high]>= key )
            high--;
        if(low<high)
            arr[low++] = arr[high];
        while( low<high && arr[low]<=key )
            low++;
        if(low<high)
            arr[high--] = arr[low];
    }
    arr[low] = key;
    return low;
}
void quick_sort(int arr[], int start, int end){
    int pos;
    if (start<end){
        pos = partition(arr, start, end);
        quick_sort(arr,start,pos-1);
        quick_sort(arr,pos+1,end);
    }
    return;
}
int main(void){
    int i;
    int arr[N]={32,12,7, 78, 23,45};
    printf("排序前 \n");
    for(i=0;i<N;i++)
        printf("%d\t",arr[i]);
    quick_sort(arr,0,N-1);
    printf("\n 排序后 \n");
    for(i=0; i<N; i++)
        printf("%d\t", arr[i]);
    printf ("\n");
    system("pause");
    return 0;
}

今天做的10个题好几个没有ac,思路明明很清晰,代码也敲出来了,可是就是没有ac…还得加油做。春节前昨完,跳着做的话平均一天12道。现在做的比较慢,主要也是很多算法没有接触过,得先学。
贴一道经典题目

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。

请计算在前K天里,骑士一共获得了多少金币。

#include <stdio.h>
int main()
{
    int n,i,j,k,sum;
    while(scanf("%d",&n)!=EOF)
    {
        sum=0; j=1; k=1;
        for(i=1;i<=n;i++){
            sum+=k;
           if(i==j){
                k++;  
                j+=k; 
            }

        }

        printf("%d\n",sum);

    }

}


猜你喜欢

转载自blog.csdn.net/weixin_43238423/article/details/86652085