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