程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> HDU 1319 Prime Cuts

HDU 1319 Prime Cuts

編輯:關於C語言

這題的難點在於:1、你得理解題意;2、你要處理繁瑣的控制。從哪裡開始輸出,到哪裡結束;每個數之前的空格,每行之後的空行等等
題意:輸入n、c。n為可能的素數的上限,輸出素數個數則要根據1---n內素數的個數決定。若素數個數為偶數,則輸出2*c個數;反之,輸出2*c-1個數。並且,要從1---n中
素數的中間向兩邊擴展,換句話也就是兩頭為輸出的素數的個數要盡量相等,如不能做到,前面的要比後面的少一個。另外,還有特例,就是如果要輸出的素數個數大於
1---n內的素數總數,就全輸出。
注意:在該題中1也是素數!
 
AC代碼:
[cpp]
#include<iostream> 
using namespace std; 
 
bool prime[1001]; 
 
void judge()   //找素數 

    memset(prime,false,sizeof(prime)); 
 
    bool flag; 
    int tmp; 
    for(int i=1;i<=1000;i++) 
    { 
        flag=true; 
        tmp=(i+1)/2; 
        for(int j=2;j<=tmp;j++) 
        { 
            if(i%j==0) 
            { 
                flag=false; 
                break; 
            } 
        } 
        if(flag) 
            prime[i]=true; 
    } 

         
int main() 

    judge(); 
 
    int n,c,i,count,tmp,rem; 
 
    while(cin>>n>>c) 
    { 
        rem=c; 
 
        count=0; 
        for(i=1;i<=n;i++)   //統計1-n內的素數個數 
        { 
            if(prime[i]) 
                count++; 
        } 
 
        c*=2; 
        if(count%2!=0)   //確定輸出個數,如果1-n間的素數個數為奇,打印2*c-1個 
            c--; 
 
        cout<<n<<" "<<rem<<":";   //格式 
 
        if(c>=count) 
        {                     //這個括號沒打,輸出結果莫名奇妙!!! 
            for(i=1;i<=n;i++) 
                if(prime[i]) 
                    cout<<" "<<i; 
        } 
        else 
        { 
            rem=0; 
            tmp=(count-c)/2;   //找到不能打印的所有素數 
            for(i=1;i<=n;i++) 
            { 
                if(prime[i]) 
                { 
                    rem++; 
                    if(rem==tmp) 
                    { 
                        rem=i;   //記錄最後一個不能打印的素數位置 
                        break; 
                    } 
                } 
            } 
 
            tmp=0; 
            for(i=rem+1;i<=n;i++)  //從下一個位置開始找素數 
                if(prime[i]) 
                { 
                    tmp++; 
                    if(tmp<=c)   //打印c個即可 
                       cout<<" "<<i; 
                    else 
                        break; 
                } 
        } 
        cout<<endl<<endl;  //每行輸出後有一空行 
    } 
 
    return 0; 

 


摘自 ON THE WAY

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved