面试题

来源:互联网 发布:美工钢笔用法 编辑:程序博客网 时间:2024/06/11 20:48


2. 毕达哥拉斯三元组(此处省略看不懂的英文名词描述...),是一组三个正数,a<b<c,并且满足a^2+b^2=c^2。例如:3^2+4^2=5^2,。现在存在一组上面那个名词的数满足a+b+c=1000,请编写一个程序找到这组数a,b,c并将它们输出。

继续送头,这组数是: 200 375 425

代码如下:

public class Main { 
    publicstatic void main(String[] args) { 
      
        final int n=1000;      
 for(int c=n;c>=0;c--){       
      for(int b=c-1;b>=0;b--){ 
                int a=n-b-c; 
               if(a<0 || a>=b) continue;
                if(pow2(a)+pow2(b)==pow2(c)){
                     System.out.printf("%d %d %d\n",a,b,c);                 }             }         }    }    
   public static int pow2(int n){       return n*n;     }

3. 平面上有6个点,每两个点之间都以红线或黑线连接,任意三点均不共线。现在,已知下列点之间的连线是红色的,剩下的连线都是黑色的,要求计算这些点组成的三角形有多少是同色的?

已知的红色连线:

6 51 21 32 32 53 6

每两个点之间都以红线或黑线连接   -->   有条边的全连通图

任意三点不共线      -->      任意三个顶点都可以组合

根据以上两条可以推出:取任意三个顶点都可以组合成一个三角形。

 

所有三角形的可能性是:

=20种

从这20种选出三条边a-b、b-c、c-a都相等的边。

 

可以构图了,使用邻接表:

代入样例数据:

三条边a-b、b-c、c-a都相等的边,比如:

6-5

5-4

4-6

 1 import java.util.Scanner; 2  3 public class Main { 4  5     public static void main(String[] args) { 6          7         final int size=6; 8         final int inf=-1; 9         10         int x[][]=new int[size][size];11         for(int i=0;i<size;i++){12             x[i][i]=inf;13         }14         15         Scanner sc=new Scanner(System.in);16         int n=sc.nextInt();17         while(n-->0){18             int u=sc.nextInt()-1;19             int v=sc.nextInt()-1;20             x[u][v]=1;21             x[v][u]=1;22         }23         24         int ans=0;25         for(int i=0;i<size;i++){26             for(int j=i+1;j<size;j++){27                 for(int k=j+1;k<size;k++){28                     if(x[i][j]==x[j][k] && x[j][k]==x[k][i]) ans++;29                 }30             }31         }32         System.out.println(ans);33         34     }
0 0
原创粉丝点击