ACM第二次J

J - 求數列的和
數列的定義如下:
數列的第一項爲n,以後各項爲前一項的平方根,求數列的前m項的和。
Input
輸入數據有多組,每組佔一行,由兩個整數n(n<10000)和m(m<1000)組成,n和m的含義如前所述。
Output
對於每組輸入數據,輸出該數列的和,每個測試實例佔一行,要求精度保留2位小數。
Sample Input
81 4
2 2
Sample Output
94.73
3.41

#include<stdio.h>
#include<math.h>

int main(void)
{
    int n,m;
    double sum,ai;
    while(scanf("%d%d",&n,&m)!=EOF)
	{
         //初始化設置:第1項
         sum=n;
         ai=n;
         //數列求和
         while(--m)
		 {//更易懂的一般寫法:for(i=2;?i<=m;i++)
         ai=sqrt(ai);
         sum+=ai;
		 }
         //輸出結果
         printf("%.2f\n",sum);
	}
    return 0;
}

K - 水仙花數
春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的:
“水仙花數”是指一個三位數,它的各位數字的立方和等於其本身,比如:153=13+53+3^3。
現在要求輸出所有在m和n範圍內的水仙花數。
Input
輸入數據有多組,每組佔一行,包括兩個整數m和n(100<=m<=n<=999)。
Output
對於每個測試實例,要求輸出所有在給定範圍內的水仙花數,就是說,輸出的水仙花數必須大於等於m,並且小於等於n,如果有多個,則要求從小到大排列在一行內輸出,之間用一個空格隔開;
如果給定的範圍內不存在水仙花數,則輸出no;
每個測試實例的輸出佔一行。
Sample Input
100 120
300 380
Sample Output
no
370 371

#include <stdio.h>

void main()
{
    int n,m,i,temp,a,b,c,flag;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        flag=0;
        if(m>n)
        {
            temp=m;
            m=n;
            n=temp;
            }
        for(i=m;i<=n;i++)
        {
            a=i/100;
            b=i%100/10;
            c=i%10;
            if(i==a*a*a+b*b*b+c*c*c)
            {
                flag++;
                if(flag==1){
                printf("%d",i);
                }
                else
                printf(" %d",i);
                }

            }
              if(flag==0)
                printf("no");
                printf("\n");
        }
}

L - 多項式求和
多項式的描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + …
現在請你求出該多項式的前n項的和。
Input
輸入數據由2行組成,首先是一個正整數m(m<100),表示測試實例的個數,第二行包含m個正整數,對於每一個整數(不妨設爲n,n<1000),求該多項式的前n項的和。
Output
對於每個測試實例n,要求輸出多項式前n項的和。每個測試實例的輸出佔一行,結果保留2位小數。
Sample Input
2
1 2
Sample Output
1.00
0.50

#include <stdio.h>
void main()
{
    int m,n,i,k;
    double sum,j;
    scanf("%d",&n);
    while (n--)
    {
        scanf("%d",&m);
        sum=0;
        k=1;
        j=1.0;
        for (i=1;i<=m;i++)
        {
            sum=sum+j/k;
            k++;
            j=-j;
        }
        printf("%.2f\n",sum);
    }
}

M - 素數判定
對於表達式n^2+n+41,當n在(x,y)範圍內取整數值時(包括x,y)
(-39<=x<y<=50),判定該表達式的值是否都爲素數。
Input
輸入數據有多組,每組佔一行,由兩個整數x,y組成,當x=0,y=0時,表示輸入結束,該行不做處理。
Output
對於每個給定範圍內的取值,如果表達式的值都爲素數,則輸出"OK",否則請輸出“Sorry”,每組輸出佔一行。
Sample Input
0 1
0 0
Sample Output
OK

#include <iostream>

using namespace std;

//判定一個數是否爲素數,是素數返回1,否則返回0
int check_prime_num(int arg)
{
    if(arg<=0)return 0;
    else if(arg==1) return 0;
    else if(arg==2)return 1;
    else
    {
        for(int j=2; j<arg; j++)
        {
            //取餘等於0,說明除了1和本身外還有其他因數,說明他不是素數,直接返回零
            if(arg%j==0) return 0;
        }
        return 1;
    }
}

int main(void)
{
    int x,y,temp,flag=0;
    while(cin>>x>>y)
    {
        //c=0,y=0就退出
        if(x==0&&y==0)break;
        //判定在輸入x,y之間的數後表達式結果爲素數的個數
        for(int i=x; i<=y; i++)
        {
            temp=i*i+i+41;
            if(check_prime_num(temp)==1)
                ++flag;
        }
        //如果表達式結果素數的個數和輸入的個數想等的話,就說明表達式結果都爲素數
        if(flag==(y-x+1))cout<<"OK"<<endl;
        else cout<<"Sorry"<<endl;
        //必須清零,供下一個循環使用
        flag=0;
    }
    return 0;
}

N - 蟠桃記
喜歡西遊記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知:悟空是在研究一個數學問題!
什麼問題?他研究的問題是蟠桃一共有多少個!
不過,到最後,他還是沒能解決這個難題,呵呵-
當時的情況是這樣的:
第一天悟空吃掉桃子總數一半多一個,第二天又將剩下的桃子吃掉一半多一個,以後每天吃掉前一天剩下的一半多一個,到第n天準備吃的時候只剩下一個桃子。聰明的你,請幫悟空算一下,他第一天開始吃的時候桃子一共有多少個呢?
Input
輸入數據有多組,每組佔一行,包含一個正整數n(1<n<30)表示只剩下一個桃子的時候是在第n天發生的。
Output
對於每組輸入數據,輸出第一天開始吃的時候桃子的總數,每個測試實例佔一行。
Sample Input
2
4
Sample Output
4
22

#include <iostream>
using namespace std;

int main(void)
{
    int n,num=1;//最後一天蟠桃數爲1,所以初始化num=1
    while(cin>>n)
    {
        while(n>=2)
        {
            //用第二天的蟠桃數就可以得出第一天蟠桃數
            num=(num+1)*2;
            n--;
        }
        cout << num << endl;
        num=1;
    }

    return 0;
}

O - 青年歌手大獎賽_評委會打分
青年歌手大獎賽中,評委會給參賽選手打分。選手得分規則爲去掉一個最高分和一個最低分,然後計算平均得分,請編程輸出某選手的得分。
Input
輸入數據有多組,每組佔一行,每行的第一個數是n(2<n<=100)表示評委的人數,然後是n個評委的打分。
Output
對於每組輸入數據,輸出選手的得分,結果保留2位小數,每組輸出佔一行。
Sample Input

3 99 98 97
4 100 99 98 97

Sample Output

98.00
98.50
#include <stdio.h>
void main()
{
    int n,i;
    double avg,max,min,sum,t;
    while (scanf("%d",&n)!=EOF)
    {
        sum = 0;
        max = 0;
        min = 0;
        for (i=0;i<n;i++)
        {
            scanf("%lf",&t);
            sum=sum+t;
            if (t>max)
                max=t;
            else if (t<min)
                min=t;
        }
        avg=(sum-min-max)/(n-2);
        printf("%.2f\n",avg);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章