第十二届蓝桥杯真题
2、直線
首先想用直線的哪種表示方式:使用斜截式,當k和b相等的時候就是同一條直線
雖然分子和分母都是整數,但是斜率可能是負數,所以就表示成分數形式:
截距也兩個整數表示
注意要約分,然后k和b相同的要進行去重操作,使用字符串的表示方式:“k b”k和b之間存在一個空格,確保k和b都相同
- 去重:如果需要去重的對象由不止一個數字組成,則可以考慮將它們轉換成字符串,并用空格隔開,放在HashSet中去重
- 斜率出現小數:那就用分數表示,那么當兩個斜率的分子和分母相等的時候就代表兩個斜率相等。
- import java.util.*;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {//不用區分a和b的大小static int gcd(int a,int b){return b==0?a:gcd(b,a%b);}public static void main(String[] args) {//哈希集合可以進行去重Set<Integer> set = new HashSet<>();Set<String> ans = new HashSet<>();int x=19,y=20;//將所有的點都放在一個集合中,注意表示方法****//需要去重是因為存在橫縱坐標相同的點for(int i=0;i<=x;i++){for(int j=0;j<=y;j++){set.add(i*100+j);//前兩位數是x軸的數值,后兩位數是y軸的數值}}List<Integer> arr = new ArrayList<>(set);int len = arr.size();//點的總數//開始遍歷for(int i =0;i<len;i++){int a=arr.get(i);for(int j=i+1;j<len;j++){int b=arr.get(j);//取出兩個坐標int x1=a/100,x2=b/100,y1=a%100,y2=b%100;int up=y1-y2,down = x1-x2;//注意斜率不存在的情況,也就是down為0的情況if(down==0) {String K=""+x1;ans.add(K);}else {int c1=gcd(up,down);String K=(up / c1)+" "+(down / c1);//使用字符串進行去重int kb=y1*down-up*x1;int c2=gcd(kb,down);String B=(kb / c2)+" "+(down / c2);//截距String ansString =K+" "+B;ans.add(ansString);}}}System.out.println(ans.size());}
}
3、貨物擺放
注意長寬高不同即為不同,而不是體積不同
其中maxn的設置,如果數組越界會報錯,故可以按照情況進行設定
import java.util.Scanner; // 1:無需package // 2: 類名必須Main, 不可修改public class Main {private static final int maxn=1010;private static final long[] a=new long[maxn];public static void main(String[] args) {long n=2021041820210418L;//不帶L會報錯int len=0;//找出所有的因數for(long i=1;i*i<=n;i++){if(n%i==0){a[len++]=i;//如果不是平方的話,防止重復if(i!=n/i){a[len++]=n/i;}}}long cnt=0;for(int i=0;i<len;i++){for(int j=0;j<len;j++){//當i和j的乘積大于n的時候就已經不符合條件了if(i*j>n) continue;for(int k=0;k<len;k++){if(a[i]*a[j]*a[k]==n){cnt++;}}}}System.out.println(cnt);} }總結
- 上一篇: phpstudy使用(80端口被syst
- 下一篇: 面试必问之JVM原理