第九届蓝桥杯C++B组 递增三元组 同样是用java完成

描述
给定三个整数数组A = [A1, A2, … AN],B = [B1, B2, … BN],C = [C1, C2, … CN],
请你统计有多少个三元组(i, j, k) 满足:

  1. 1 <= i, j, k <= N
  2. Ai < Bj < Ck
    这个题的思路是参考网上一个大神的思路,大神就是大神啊,我还差的远啊
    参考的大神思路是首先把三个数组排好序,再进行选择比较
    排序就不多说了,冒泡很快解决,但是在选择有多条路径的时候可真是难倒我了
    最后我的方法是这样的:
    1.建立两个数组:ab[ ][ ] 和bc[ ]
    2.ab是A和B数组之间的联系,只要a[i]<b[j],就将ab[i][j]设为1
    3.bc是B和C之间的联系,因为已经排好序了,所以如果b[j]<c[k]则b[j]<c[k]后面的任意一个数,也就是说比b[j]大的数有c.length-1个数
    4.之后当ab[i][j]==1时,则count+=b[j]
    画个图更好理解一些
    好吧…图片一直上传失败,心疼自己,感觉过一段再来看可能就看不懂了
    只粘个选择路径的代码把,为了写这个方法花费了好长时间,因为一开始怎么也没想到该怎么计算路径的数量,唉。。。烦
    这是单独写成了一个类,为了方便实验成功性,用的是题目上给的那三个数组ABC
    最后又把代码粘贴到源代码里头的
public class xuanze {
   public static void main(String args[]){
    int a[]={1,1,1};
    int b[]={2,2,2};
    int c[]={3,3,3};
    int ab[][]=new int[10][10];
    int bc[]=new int[10];
    int i=0,j=0,k=0;
    for(i=0;i<a.length;i++){
     for(j=0;j<b.length;j++){
      if(a[i]<b[j]){
       ab[i][j]=1;
      }
     }
    
    }
    
    int j1=0,k1=0;
    while(j1<b.length){
     while(k1<c.length){
     if(b[j1]<c[k1]){
      bc[j1]=c.length-k1;
      break;
     }
     else{
      k1++;
     }
     }
     j1++;
    }
    int count=0;
    for(int ab1=0;ab1<ab.length;ab1++){
     for(int bc1=0;bc1<ab.length;bc1++){
      if(ab[ab1][bc1]==1){
       count+=bc[bc1];
      }
     }
    }
    System.out.println(count);
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值