1. 程式人生 > >資訊學奧賽一本通(C++版) 第一部分 C++語言 第四章 迴圈結構的程式設計

資訊學奧賽一本通(C++版) 第一部分 C++語言 第四章 迴圈結構的程式設計

//1091 求階乘的和
#include <stdio.h>
int f(int n){
    int i,ans=1;
    for(i=1;i<=n;i++)
        ans*=i;
    return ans;
}
int main(){
    int n,i,sum=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        sum+=f(i);
    printf("%d",sum);
    return 0;
}

//1092 求出e的值
#include <stdio.h>
long long f(int n){
    int i;
    long long ans=1;
    for(i=1;i<=n;i++)
        ans*=i;
    return ans;
}
int main(){
    int n,i;
    double e=0;
    scanf("%d",&n);
    for(i=0;i<=n;i++)
        e+=1.0/f(i);
    printf("%.10lf",e);
    return 0;
}

//1093 計算多項式的值
//該題要小心,n<=10^6,一不小心,要超時 ,一開始很輕鬆編出程式碼,但測試中發現超時
//馬上進行修改,提交 未通過,將float全改成double ,提交AC,上了題目的當,題中說
//"保證最終結果在float範圍內",瞎扯,記住了用double不會錯。
#include <stdio.h>
int main(){
    int i,n;
    double x,ans=1,t=1;
    scanf("%lf%d",&x,&n);
    for(i=1;i<=n;i++){
        t*=x;
        ans+=t;
    }
    printf("%.2lf",ans);
    return 0;
}

//1094 與7無關的數
#include <stdio.h>
int f(int n){
    if(n%7==0)return 1;
    while(n){
        if(n%10==7)return 1;
        n/=10;
    }
    return 0;
}
int main(){
    int n,i,ans=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        if(f(i)==0)
            ans+=i*i;
    printf("%d",ans);
    return 0;
}

//1095 數1的個數
#include <stdio.h>
int f(int n){
    int cnt=0,i;
    while(n){
        if(n%10==1)cnt++;
        n/=10;
    }
    return cnt;
}
int main(){
    int i,cnt=0,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        cnt+=f(i);
    printf("%d",cnt);
    return 0;
}

//1096 數字統計
#include <stdio.h>
int f(int n){
    int i,cnt=0;
    while(n){
        if(n%10==2)cnt++;
        n/=10;
    }
    return cnt;
}
int main(){
    int left,right,i,ans=0,cnt=0;
    scanf("%d%d",&left,&right);
    for(i=left;i<=right;i++){
        cnt+=f(i);
    }
    printf("%d",cnt);
    return 0;
}

//1097 畫矩形
//提交,未通過,一測試,發現是自己編碼的問題,修改,提交AC
#include <stdio.h>
int main(){
    int row,col,i,j,cmd;
    char s[2];
    scanf("%d%d%s%d",&row,&col,s,&cmd);
    if(cmd==1)
        for(i=1;i<=row;i++){
            for(j=1;j<=col;j++){
                printf("%c",s[0]);
            }
            printf("\n");
        }
    else{
        for(j=1;j<=col;j++)
            printf("%c",s[0]);
        printf("\n");
        for(i=2;i<=row-1;i++){
            for(j=1;j<=col;j++)
                if(j==1||j==col)
                    printf("%c",s[0]);
                else
                    printf(" ");
            printf("\n");
        }
        for(j=1;j<=col;j++)
            printf("%c",s[0]);
        printf("\n");
    }
    return 0;
}

//1098 質因數分解
#include <stdio.h>
int main(){
    int n,i;
    scanf("%d",&n);
    for(i=2;i*i<=n;i++)
        if(n%i==0){
            printf("%d",n/i);
            break;
        }
    return 0;
}

//1099 第n小的質數
//樣例解釋2 3 5 7 11 13 17 19 23 29   
#include <stdio.h>
int isPrime(int n){
    int i;
    if(n<2)return 0;
    if(n==2)return 1;
    for(i=2;i*i<=n;i++)
        if(n%i==0)return 0;
    return 1;
}
int main(){
    int n,k=2,cnt=1;
    scanf("%d",&n);
    while(cnt<n){
        k++;
        while(isPrime(k)==0)k++;
        cnt++;
    }
    printf("%d",k);
    return 0;
}

//1100 金幣
#include <stdio.h>
int main(){
    int n,ans=0,i,d=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        d+=i;
        ans+=i*i;
        if(d>=n)
            break;
    }
    if(d==n)printf("%d",ans);
    else printf("%d",ans-(d-n)*i);
    return 0;
}

//1101 不定方程求解
//思路 列舉
#include <stdio.h>
int main(){
    int a,b,c,cnt=0,i,j;
    scanf("%d%d%d",&a,&b,&c);
    for(i=0;i<=c;i++)
        for(j=0;j<=c;j++)
            if(a*i+b*j==c)cnt++;
            else if(a*i+b*j>c)break;
    printf("%d",cnt);
    return 0;
}

2017-10-22 14:05 AC該節內容