1. 程式人生 > >九度oj 專題整理(模擬部分4)

九度oj 專題整理(模擬部分4)

1070請參見模擬1部分

題目1068:球的半徑和體積

double型別表示的範圍比float和long long大,所以我多用double,注意PI定義

#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#define PI acos(-1)
using namespace std;
 
int main()
{
    double x0,y0,z0,x1,y1,z1;
    while(~scanf("%lf %lf %lf %lf %lf %lf",&x0,&y0,&z0,&x1,&y1,&z1))
    {
        double r=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+(z1-z0)*(z1-z0));
        double area=4.0*PI*((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+(z1-z0)*(z1-z0))*r/3.0;
        printf("%.3lf %.3lf\n",r,area);
    }
    return 0;
}


題目1067:n的階乘


#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
   
int main()  
{  
    int n,i;  
    while(scanf("%d",&n) != EOF)  
    {  
        double count = 1;  
        for(i = 1;i <= n;i++){  
            count *= i;  
        }  
        printf("%.0lf\n",count);  
    }  
    return 0;  
}  

題目1065:輸出梯形

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
#define LL long long
using namespace std;
 
int main()
{
    int h;
    while(~scanf("%d",&h))
    {
        for(int i=0; i<h; i++)
        {
            for(int j=0; j<2*h-2*(i+1); j++)
            {
                printf(" ");
            }
            for(int k=0; k<h+2*i; k++)
            {
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}

題目1064:反序數

#include<stdio.h>
#include<stdlib.h>
 
int main()
{
    for(int i=1000;i<1111;i++)
    {
        int j=i;
        int m=0;
        while(j)
        {
                m=m*10+j%10;
                j/=10;
        }
        if(m==i*9)
        {
                printf("%d\n",i);
        }
    }
}

1063:略

1062:注意求導不要求錯,在NYOJ上練過這道題目,求導求錯了= =

簡單看了前面的題目,越來越水,也沒有寫的必要了,就把之前A過的歷史放到這裡吧,也算是有始有終= =

1060,竟為輸入方式不明wa的原因,也是略坑,注意冒號與數字之間的空格= =

#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#define PI acos(-1)
using namespace std;
int main(){
    int mark[66];
    int cnt=0,ct=0;
    memset(mark,0,sizeof(mark));
    for(int i=2; i<=60; i++)
    {
        int num=sqrt(i);
        int sum=0;
        for(int j=2; j<=num; j++)
        {
            if(i%j==0)
            {
                sum+=j;
                if(i!=j*j)
                {
                    sum+=i/j;
                }
            }
        }
        sum+=1;
        //printf("%d %d\n",i,sum);
        if(sum==i)
        {
            mark[i]=1;
            cnt++;
        }
        else if(sum>i)
        {
            mark[i]=2;
            ct++;
        }
    }
    printf("E: ");
    for(int i=2; i<=60; i++)
    {
        if(mark[i]==1&&cnt>1)
        {
            printf("%d ",i);
            cnt--;
        }
        else if(mark[i]==1&&cnt==1)
        {
            printf("%d\n",i);
            break;
        }
    }
    printf("G: ");
    for(int i=2; i<=60; i++)
    {
        if(mark[i]==2&&ct>1)
        {
            printf("%d ",i);
            ct--;
        }
        else if(mark[i]==2&&ct==1)
        {
            printf("%d\n",i);
            break;
        }
    }
    return 0;
}

1059,暴力迴圈
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<set>
#include<map>
#define LL long long
#define PI acos(-1)
#define exp 1e-9
#define INF 0x7fffffff
 
using namespace std;
 
int main()
{
    //int a,b,c;
    for(int i=0; i<=9; i++)
    {
        for(int j=0; j<=9; j++)
        {
            for(int k=0; k<=9; k++)
            {
                int ans,cnt;
                ans=i*100+j*10+k;
                cnt=j*100+k*10+k;
                if(ans+cnt==532)
                    printf("%d %d %d\n",i,j,k);
            }
        }
    }
    return 0;
 }
 
1050:略

1048:排序,比較平方和與第三邊平方大小

1045:化分數為整數,很多地方用到這個思路,避免不必要的精度損失

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<set>
#include<map>
#define LL long long
#define PI acos(-1)
#define exp 1e-9
#define INF 0x7fffffff
 
using namespace std;
 
int main()
{
    int n,x,y,z;
    while(~scanf("%d",&n))
    {
        for(int i=0; i<=100; i++)
        {
            for(int j=0; j<=100-i; j++)
            {
                int k=100-i-j;
                int ans=3*5*i+3*3*j+k;
                if(ans<=n*3)
                    printf("x=%d,y=%d,z=%d\n",i,j,k);
            }
        }
    }
    return 0;
 }

1014:多級排序的水題,說到排序我一直念念不忘並列排名的那個題目,對我來說,還是不夠熟悉的,之後會補上

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<set>
#include<map>
#define LL long long
#define PI acos(-1)
#define exp 1e-9
#define INF 0x7fffffff
using namespace std;
priority_queue <int, vector<int>, greater<int> > Q;
struct node
{
    char id[25];
    int score;
};
bool cmp(node a, node b)
{
    if(a.score!=b.score)
        return a.score>b.score;
    else
    {
        int tmp=strcmp(a.id,b.id);
        return tmp<0;
    }
}
int main()
{
    int n,M,G,m,num;
 
    while(~scanf("%d",&n)&&n)
    {
        scanf("%d %d",&M,&G);
        node student[1010];
        for(int i=0; i<=1010; i++)
            student[i].score=0;//memset(student[i].id,'\0',sizeof(student[i].id));
        int list[15];
        memset(list,0,sizeof(list));
        for(int i=1; i<=M; i++)
            scanf("%d",&list[i]);
        for(int i=0; i<n; i++)
        {
            scanf("%s",student[i].id);
            scanf("%d",&m);
            for(int j=0; j<m; j++)
            {
                scanf("%d",&num);
                //printf("%d\n",list[num]);
                student[i].score+=list[num];
            }
        }
        sort(student,student+n,cmp);
        int ans=0;
        for(int i=0; i<n; i++)
        {
            //printf("%d\n",student[i].score);
            if(student[i].score>=G)
                ans++;
                //printf("%s %d\n",student[i].id,student[i].score);
        }
        printf("%d\n",ans);
         for(int i=0; i<n; i++)
        {
            if(student[i].score>=G)
                //ans++;
                printf("%s %d\n",student[i].id,student[i].score);
        }
    }
 
    return 0;
}

1013:算出到達和離開時間,進行排序

其他太水了,除1038沒有讀題之外,模擬部分該整理的已經結束,右手用滑鼠用的已廢= =,都是水題,於是乎,體力勞動吧= =