zoukankan      html  css  js  c++  java
  • scau 1079 三角形(暴力)

    </pre>1079 三角形</h1></center><p align="center" style="margin-top:0px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; line-height:24px; color:rgb(42,42,42); font-family:Verdana,Tahoma,Arial,sans-serif; font-size:14px; background-color:rgb(250,252,255)">时间限制:500MS  内存限制:65536K提交次数:283 通过次数:82</p><p align="center" style="margin-top:0px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; line-height:24px; color:rgb(42,42,42); font-family:Verdana,Tahoma,Arial,sans-serif; font-size:14px; background-color:rgb(250,252,255)">题型: 编程题   语言: G++;GCC</p><p align="left" style="margin-top:0px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; line-height:24px; color:rgb(42,42,42); font-family:Verdana,Tahoma,Arial,sans-serif; font-size:14px; background-color:rgb(250,252,255)"></p><h1 style="margin:0px 0px 15px; padding:0px; display:inline; background-color:rgb(250,252,255); color:rgb(96,96,96); font-size:18px; letter-spacing:-1px; font-family:Verdana,Tahoma,Arial,sans-serif">Description</h1><span style="color:rgb(42,42,42); font-family:Verdana,Tahoma,Arial,sans-serif; font-size:14px; background-color:rgb(250,252,255)"></span><pre style="color:rgb(42,42,42); font-size:14px; background-color:rgb(250,252,255)">著名的数学家毕达哥拉斯可能从来都不曾想过有人居然会问他这样的一个问题:给出一个整数,存在多少个直角三角形,
    它的某一条边的长度等于这个整数,而且其他边的长度也是整数。既然毕达哥拉斯不可能预见到有计算机的出现,
    如果他回答不出来,那谁又能责怪他呢?但是现在既然你有了计算机,那么回答不出来就说不过去了。



    输入格式

     第一行有一个整数n,代表有多少个数据(1<=n<=20)。接下来有n行,每行代表一个数据。一个数据就是一个整数ai(a<=i<=n,1<=ai<=100)。


    输出格式

    每个数据都必须有相应的输出。两个数据的输出之间有一个空行。最后一个测试数据的输出后不要加空行。
    对于每一个数据,如果找不到解,则输出一个空行。如果找到解,就把符合条件的所有直角三角形输出。每个三角形占一行,输出该三角形的另外两条
    边,必须先输出长边,然后一个逗号,再输出短边。两个三角形之间不能有空行,而且必须按照长边降序排列。
    


     

    输入样例

    2
    20
    12
    


     

    输出样例

    101,99
    52,48
    29,21
    25,15
    16,12
    
    37,35
    20,16
    15,9

    13,5

    ****************************************************************************************************************

    本题要用到模拟,而且还要考虑输入a边长时,a可能为直角边或者是斜边。

    还有一个重要的是,当a为直角边的时候,斜边最长为多少?

    还有就是输出格式从大到小的数排列。还有就是当a是斜边的时候怎么解决输出重复的问提。

    ****************************************************************************************************************

    方案1(作者最开始的源码)

    #include <stdio.h>
    int s[50];
    int main()
    {
        int n, i, a, x, y,flag;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d",&s[i]);
    
    
    
       for(i=0;i<n;i++)
       {
           a=s[i];flag=0;
    
            //a作为直角边
           for(y=2501;y>0;y--)//输入为100时最大的斜边是2501
           {
               for(x=y-1;x>0;x--)
               {
                   if(a*a+x*x==y*y)
                    {
                        printf("%d,%d
    ",y,x);
                        flag=1;
                    }
               }
           }
    
           //a为斜边
           int judge=0;
           for(y=1;y<a;y++)
           {
               for(x=a-y+1;x<a+y&&x>judge;x++)//可以直接x>y,一开始没想到
               {
                   if(x*x+y*y==a*a)
                    {
                        judge=y;
                        printf("%d,%d
    ",x,y);
                        flag=1;
                    }
               }
           }
           if(flag==0)  printf("
    ");
    
            if(i!=n-1)  printf("
    ");
       }
       return 0;
    }

    ********************************************************************************************************

    方案2(优化过)

    #include <stdio.h>
    #include<math.h>
    void work()
    {
        int a,i,j;
        scanf("%d",&a);
        for(i=2501;i>a;i--)//a为直角边时
        {
            j=(int)sqrt(i*i-a*a);
            if(a*a+j*j==i*i&&i>j)
                    printf("%d %d
    ",i,j);
        }
    
        for(i=a-1;i>0;i--)
        {
            j=(int)sqrt(i*i-a*a);
            if(a*a+j*j==i*i&&i>j)
                    printf("%d %d
    ",i,j);
                }
        }
        if(flag==0)
            printf("
    ");
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        while(n--)
        {
            work();
            if(n)
                printf("
    ");
        }
        return 0;
    }
    

    第二种方法dalao教的,感觉简单一些。
  • 相关阅读:
    How do I access arcobjects from python?
    Win7 打开或关闭Windows功能 窗口空白 解决方案(ZZ)
    解释什么叫工作
    电脑城奸商最怕顾客知道的十条经验
    25岁前你要学会放下的八样东西
    必看十大电影
    SQL Server 中查询非中文,非英文,非数字的特殊列
    CHARINDEX 和 PATINDEX
    主流开源数据库的技术特点点评
    information_schema.routines与sysobjects
  • 原文地址:https://www.cnblogs.com/denghaiquan/p/6666089.html
Copyright © 2011-2022 走看看