嚴重過敏

可發文群組
  • 內容數

    19
  • 註冊日期

  • 最後上線

文章 發表由 嚴重過敏

  1. 我去查了一下中間鍵值的方法..

    結果就AC了~xd

    修改後的程式碼如下

    #include <stdio.h>

    #include <stdlib.h>

    void sort(int x[],int left,int right)

    {

    int i,j,temp,k;

    if(left<right)

    {

    i=left-1;

    j=right+1;

    k=x[(left+right)/2];

    while(1)

    {

    while(x[++i]<k);

    while(x[--j]>k);

    if(i >= j)

    break;

    temp=x; x=x[j]; x[j]=temp;

    }

    sort(x,left,i-1);

    sort(x,j+1,right);

    }

    }

    int x[1000000];

    int main(void)

    {

    int n,i,j,k;

    while(scanf("%d%d",&n,&k)!=EOF)

    {

    if(n==0||k==0)

    break;

    for(i=0;i<n;i++)

    scanf("%d",&x);

    sort(x,0,n-1);

    printf("%d\n",x[n-k]);

    }

    return 0;

    }

    速度是1484MS

    的確快了很多喔

  2. 不定方程組ax+by=gcd(a,b)

    如一個分油問題

    (出自昌爸工作坊 http://www.mathland.idv.tw/fun/oil.htm)

    一道趣味數學題提到,有位農夫到油行,想買兩袋5公升的麻油。但是油行裡除了三個容積分別是10公升、7公升、3公升的量油杯之外,沒有任何測量工具。油行老闆如何運用這3個量杯,倒出兩個5公升的麻油呢?

    我們感到興趣的是,這3個量杯是否可以完成老闆和農夫的需求。如果量杯的容積分別是10公升、6公升、4公升或是10公升、8公升、2公升,是否也可以完成老闆和農夫的需求呢?

    首先,油行老闆以10公升的量杯裝滿麻油,再將麻油在3個量杯之間倒來倒去,直到有兩個量杯的麻油體積是5公升。而這「倒來倒去」的過程,就數學來說,就是在不同量杯之間麻油容量體積上進行加減運算。從不定方程式來看這道題,我們可假設老闆將麻油倒進7公升的量杯x次;麻油由7公升量杯倒進3公升的量杯y次,因為最後7公升量杯內裝5公升麻油,所以7x-3y=5。

    y=(7x-5)/3 = 2x-2+(x+1)/3

    ,設 t=(x+1)/3,且t 是正整數。x=3t-1,y=2(3t-1)-2+t=7t-4。所以

    x=3t-1

    y=7t-4

    取t=1時,x=2,y=3。也就是說在倒麻由的過程中,老闆將麻油倒進7公升的量杯2次;麻油由7公升量杯倒進3公升的量杯3次。可以完成老闆和農夫的需求,倒出兩杯各5公升的麻油。

    如果以(a,b,c)表示容積10公升、7公升、3公升量杯內麻油的容量,則過程是(10,0,0)-->(3,7,0)-->(3,4,3)-->(6,4,0)-->(6,1,3)-->(9,1,0)-->(9,0,1)-->(2,7,1)-->(2,5,3)-->(5,5,0)

    如果量杯的容積分別是10公升、6公升、4公升,照上述假設,6x-4y=5,(6,4)=2不是5的因數,所以這個不定方程式沒有整數解。而8x-2y=5也沒有整數解,因此容積10公升、6公升、4公升的量杯或是10公升、8公升、2公升都無法完成老闆和農夫的需求的。

    --------------------------------------------------------------------------------------------------------------------

    其中求 t 的方法不太懂~

    如何看出 t要設為 (x+1)/3??

    and 方程式設為7x-3y=5 是因為 7 要倒入 3 ?所以 -3y ??

    如何求最少的分油次數???

    如我敘述能力不佳請包含...

  3. ..不過腳踏車的還是沒過呢~= =

    #include <stdio.h>

    #include <stdlib.h>

    void sort(int x[],int left,int right)

    {

    int i,j,temp,k;

    if(left<right)

    {

    i=left+1;

    j=right;

    k=x

    ;

    do

    {

    while(x<=k)

    i++;

    while(x[j]>k)

    j--;

    if(i<j)

    {

    temp=x; x=x[j]; x[j]=temp;

    }

    } while(i<j);

    temp=x

    ; x

    =x[j]; x[j]=temp;

    sort(x,left,j-1);

    sort(x,j+1,right);

    }

    }

    int x[1000000];

    int main(void)

    {

    int n,i,j,k;

    while(scanf("%d%d",&n,&k)!=EOF)

    {

    if(n==0||k==0)

    break;

    for(i=0;i<n;i++)

    scanf("%d",&x);

    sort(x,0,n-1);

    printf("%d\n",x[n-k]);

    }

    return 0;

    }

    以上為程式碼~感恩xd

  4. tioj 的1167題..

    http://tioj.redirectme.net:8080/JudgeOnline/showproblem?problem_id=1167

    和1287題

    http://tioj.redirectme.net:8080/JudgeOnline/showproblem?problem_id=1287

    兩題我都是同樣的問題~Time Limit Exceed

    我都是用快速排序去找的~怎會超出時間呢?難道有更快的方法?還是我快速排序有寫錯?

    以後是我寫的快速排序的程式碼

    void sort(int x[],int left,int right)

    {

    int i,j,temp,k;

    if(left<right)

    {

    i=left+1;

    j=right;

    k=x

    ;

    do

    {

    while(x<k)

    i++;

    while(x[j]>k)

    j--;

    if(i<j)

    {

    temp=x; x=x[j]; x[j]=temp;

    }

    } while(i<j);

    temp=x

    ; x

    =x[j]; x[j]=temp;

    sort(x,left,j-1);

    sort(x,j+1,right);

    }

    }

    感謝~xd

  5. #include <stdio.h>

    #include <math.h>

    int fun(int);

    int main(void)

    {

    int x;

    while(scanf("%d",&x)==1);

    if(fun(x)==1)puts("質數");

    else puts("非質數");

    return 0;

    }

    int fun(int n)

    {

    int i,temp;

    if(n==2)

    return 1;

    if(n%2==0)

    return 0;

    temp=(int)sqrt((double)n);

    for(i=3;i<=temp;i+=2)

    if(n%i==0)

    return 0;

    return 1;

    }

    放到zerojudge上

    出來的結過是WA...如下

    與正確輸出不相符(line:1)

    您的答案為: 非質數

    正確答案為: 質數

    到底哪裡出錯????

  6. 能用c語言複製檔案或刪除嗎?

    還有如果將鍵盤入的資料寫入檔案中時~不能加入空白鍵嗎?

    案了空白鍵之後就不會再出現字了..

    #include <stdio.h>

    #include <stdlib.h>

    int main(void)

    {

    FILE *stream;

    char con[15];

    stream=fopen("Unit1.txt","w");

    if(stream==NULL)

    printf("cant open this file\n");

    else

    {

    printf("輸入一段文字,寫入在桌面上的Unit1.txt\n");

    scanf("%s",con);

    fprintf(stream,"%0s\n",con);

    }

    fclose(stream);

    system("pause");

    return 0;

    }

    這樣寫有錯嗎?