zoukankan      html  css  js  c++  java
  • AOJ.综合训练.2016-11-24

    AOJ.综合训练

    友情提示:不要复制粘贴,看完解析先自己尝试写一下。不行再看题解。这样才会有提高!

    A题 金字塔

    题意分析

    分别读入10个数,按照他给出的格式输出就行了。注意每有7个字符(包括空格)

    #include <stdio.h>
    
    
    int main()
    {
        int a,b,c,d,e,f,g,h,i,j,k;
        scanf("%d %d %d %d %d %d %d %d %d %d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);
        printf("   %d   
    ",a);
        printf("  %d %d  
    ",b,c);
        printf(" %d %d %d 
    ",d,e,f);
        printf("%d %d %d %d
    ",g,h,i,j);
        return 0;
    }
    

    B题 最大的两个数 (╯▽╰)

    题意分析

    给出n个数,升序排序,然后输出最大的2个就行了。注意冒泡排序写法。外层循环n-1次,内存循环n-i-1次。

    
    #include <stdio.h>
    #define max 10001
    int a[max];
    int main()
    {
        int n;
        while(scanf("%d",&n) != EOF){
            int i;
            for(i = 0;i<n;i++){
                scanf("%d",&a[i]);
            }
            int j,t;
            for(i = 0;i<n-1;i++){
                for(j = 0;j<n-i-1;j++){
                    if(a[j]<a[j+1]){
                        t = a[j];
                        a[j] = a[j+1];
                        a[j+1] = t;
                    }
                }
            }
            printf("%d %d
    ",a[0],a[1]);
        }
        return 0;
    }
    

    C题 素数判断

    题意分析

    给出一个数t,接下来有t组数据,分别判断这t组数据是否为素数,是的话输出Yes,否的话输出No(看清是YES还是Yes,否则会WA)。题目中也标出来了,1不是素数!(被这个地方坑了一次)。
    用素数打表的方法。首先要知道:
    定义的全局变量默认为0。
    先处理从2开始的素数,把所有2的倍数(最大到定义的max)全部置为1,代表非素数。
    之后向后寻找,直到找到下一个素数,把他的所有倍数置为1,代表非素数。
    ……
    直到循环为max为止,素数表就打好了。
    如果数组元素为0,代表他是素数,否则为非素数。
    但是别忘了最后手动把1置为非素数

    #include <stdio.h>
    #define max 1005
    int a[max];
    int main()
    {
        int i,j;
        for(i = 2;i<=max;i++){
            if(a[i]!=0){
                continue;
            }
            for(j = 2;j*i<=max;j++){
                a[j*i] = 1;
            }
        }
        a[1] = 1;
        int t;
        scanf("%d",&t);
        while(t--){
            int n;
            scanf("%d",&n);
    
            if(a[n]){
                printf("No
    ");
            }else{
                printf("Yes
    ");
            }
        }
        return 0;
    }
    

    D题 函数计算

    题意分析

    给出一个多项式,分别求出当这个多项式中x为1,2,……20的结果,每行一个结果。
    题目也告诉了公式中有n层层嵌套,表明多项式中的结构都是完全相同,可以抽象成1+1/f(x),因此可以算出第一层的结果,然后层层带入即可。为了保证更高的精度,我用了double型的变量。

    #include <stdio.h>
    int main()
    {
        int n =10;
        int t = 20;
        int k;
        for(k = 1;k<=t;k++){
            n = 9;
            double ret = 1+ 1.0/k;
            while(n--){
                ret = 1 +1.0 / ret;
            }
            printf("%.6f
    ",ret);
        }
        return 0;
    }
    

    E题 求面积

    题意分析

    每组数据给出一个n,之后给出来一系列点,这些点分别为(0,a0),(1,a1),(2,a2)……即横坐标为0,1,2,3……,纵坐标为给出的数。 并且为实数(又被这坑了),所以应该用double型变量保存。
    读入这些数据到double型数组后,计算面积。我是这样想的,如果2个点中有一个纵坐标为0,那么就可以按照三角形面积公式否则就按照梯形面积公式计算(其实完全可以化成一个式子)。把每次的面积累加,就可以得到最后结果。

    #include <stdio.h>
    #define max 1000
    double a[max];
    int main()
    {
        //freopen("in.txt","r",stdin);
        int n;
        while(scanf("%d",&n)!=EOF){
            int i;
            double ret = 0;
            for(i = 0;i<n;i++){
                scanf("%lf",&a[i]);
            }
            for(i = 1;i<n;i++){
                if(a[i-1] == 0){
                    ret += 1.0 * a[i] /2;
                }else if( a[i] == 0){
                    ret += 1.0 * a[i-1] /2;
                }else{
                   ret += 1.0*(a[i]+a[i-1]) /2;
                }
            }
            printf("%.3f
    ",ret);
        }
        return 0;
      //  fclose(stdin);
    }
    

    F题 直角三角形

    题意分析

    这题暴力枚举就行,3层循环嵌套,貌似之前做过一个什么男人女人小孩多少钱的问题,和那个类似。
    但是要注意保证非降序输出,于是在多层嵌套循环起始条件又有要求。
    第二层j起始值为第一层i的值,第三层k起始值为第二层,这样能保证非降序并且相同的数据只输出一次。
    如果在区间内遍历完,发现没有可以输出的直角三角形组合,那就输出NO(不是No),可以设置标志变量flag,如果找到一组,flag=1,最后遍历完,判断flag,为0输出NO,否则什么都不做。

    #include <stdio.h>
    int main()
    {
        //freopen("out.txt","w",stdout);
        int x,y;
        while(scanf("%d %d",&x,&y) != EOF){
            int i,j,k;
            int flag = 0;
            for(i = x;i<=y;i++){
                for(j = i;j<=y;j++){
                    for(k = j;k<= y;k++){
                        if(i+j>k){
                            if(i*i+j*j==k*k){
                                flag = 1;
                                printf("%d %d %d
    ",i,j,k);
                            }
                        }
                    }
                }
            }
            if(!flag){
                printf("NO
    ");
            }
        }
        return 0;
       // fclose(stdout);
    }
    
  • 相关阅读:
    CSS 仿 iOS 系统通知数字样式
    Asp.Net Grieview Eval 绑定数据 调用JS事件
    C#:decimal的去0显示
    WebService 错误:无法加载协定为xxx的终结点配置部分,因为找到了该协定的多个终结点配置
    C#:调用webservice时提示对操作的回复消息正文进行反序列化时出错
    C#:生成短网址
    C#:优惠券代码
    C# 调用webservice 几种办法(转载)
    ASP.NET: 正在中止线程 错误原及解决方法
    IOS:Safari不兼容Javascript中的Date问题
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367207.html
Copyright © 2011-2022 走看看