蓝桥杯学习
1,九进制转换成十进制
做错题了,但是也是简单的签到题,
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner (System.in); int a=2*1+2*9+0+2*9*9*9; System.out.println(a);' } }
2,星期计算
|
星期天 |
星期一 |
星期二 |
星期三 |
星期四 |
星期五 |
星期六 |
|
1 |
2 |
3 |
4 |
5 |
6 |
0 |
下行是sum对应的值,所以当sum={2,3,4,5,6,0}时要+6再与7取余,当sum=1时要+6
import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //在此输入您的代码... int a=20; int b=22; int sum=(int)(Math.pow(a,b)%7); if(sum==1){ System.out.println(sum+6); }else System.out.println((sum+6)%7); scan.close(); } }
3,山
只能暴力解题了,无其他的方法了
利用了StringBuffer和String的转换和int与String之间的转换
<1>int a = 123;
String s = "" + a; //直接拼接 “”
<2>int a =123;
String s = String.valueOf(a); //调用String的valueOf()方法
<3>int a = 123;
String s = Integer.toString(a);//调用整型包装类Integer的toString()方法
字符串转换成int
<1>String ch=”123”;
Int a=Integer.parseint(ch);]
<2>String s = "1234";
int a = Integer.valueOf(s).intValue();
String和StringBuffert之间的转换
<1>StringBuffer s=new StringBuffer(“hello”);
String ch=s.tostring();
package train; import java.util.Scanner; public class mou { static boolean check(int x){ String s=String.valueOf(x); for(int i=0;i<s.length()/2;i++){ if(s.charAt(i)!=s.charAt(s.length()-i-1)) return false; } for(int i=1;i<s.length()/2+1;i++){ if(s.charAt(i)<s.charAt(i-1)) return false; } return true; } public static void main(String [] args){ int ans=0; for(int i=2022;i<=2022222022;i++){ if(check(i))ans++; } System.out.println(ans); } }
4,字符统计
签到题,
package train; import java.util.Scanner; public class test_2 { public static void main(String[] args){ Scanner scan=new Scanner(System.in); String s= scan.nextLine(); int []ch=new int[27]; int max=0; for(int i=0;i<s.length();i++){ ch[(int)s.charAt(i)-65]++; if(ch[(int)s.charAt(i)-65]>max){ max=ch[(int)s.charAt(i)-65]; } } for(int i=0;i<27;i++){ if(ch[i]==max){ System.out.println((char)(i+65)); } } } }
5,最少刷题数
此题有点恶心,起初只以为是签到题,找出中位数然后直接比较大小,然后比中位数小的就可以加到比中位数大即可,到最后全部考虑完毕通过率只有70%,很不能理解,就先这样吧
package train; import java.util.Scanner; import java.util.Arrays; public class test_3 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n; n = scan.nextInt(); int[] a = new int[n]; int[] b = new int[n];//存储要加多少数 int[] c = new int[n];//存储输入的数组 for (int i = 0; i < n; i++) { a[i] = scan.nextInt(); c[i] = a[i]; } Arrays.sort(c); int mid; mid = c[n / 2]; int k=0; for(int i=0;i<n;i++){ if(mid==a[i]) k++; } if (n % 2 == 0&&k==1) { for (int i = 0; i < n; i++) { if (a[i] < mid) System.out.print(mid - a[i]); else System.out.print("0"); System.out.print(" "); } } else { for (int i = 0; i < n; i++) { if (a[i] < mid) System.out.print(mid - a[i] + 1); else System.out.print("0"); System.out.print(" "); } } } }
二分方法:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static int get() throws Exception {
in.nextToken();
return (int) in.nval;
}
public static void main(String[] args) throws Exception {
int n = get();
int[] a = new int[n];
final int N = 100000;
// num[i]为i的个数
int[] num = new int[N + 1];
int max = -1;
for (int i = 0; i < n; ++i) {
a[i] = get();
max = Math.max(max, a[i]);
++num[a[i]];
}
// sum[i]为比i小的个数
int[] sum = new int[max + 1];
for (int i = 1; i <= max; ++i) {
sum[i] = num[i - 1] + sum[i - 1];
}
// 比i小的数的个数为sum[i]
// 比i大的数的个数为n-sum[i]-num[i]
StringBuilder ans = new StringBuilder();
for (int i = 0; i < n; ++i) {
if (n - sum[a[i]] - num[a[i]] <= sum[a[i]]) {
ans.append("0 ");
} else {
// 定义l最后落到应该刷的最少的题目数
// 不可能取到max+1
int l = a[i] + 1, r = max, mid;
while (l <= r) {
mid = l + r >> 1;
// 比i刷题少的个数要减去当前这个人
if (n - (sum[mid] - 1) - (num[mid] + 1) <= sum[mid] - 1)
r = mid - 1;
else
l = mid + 1;
}
ans.append((l - a[i]) + " ");
}
}
System.out.println(ans);
}
}
6,求阶乘
先是find一个x查找因子5就可以,一个阶乘有几个因子5,就会有几个尾数零
然后使用二分查找,因为有一个区间在这个区间里面查找k
package train; import java.util.Scanner; public class test_4 { static long find(long x){ long res=0; while(x!=0){ res=res+x/5; x=x/5; } return res; } static void solve(){ } public static void main(String[] args) { Scanner sc=new Scanner(System.in); long k=sc.nextLong(); long mid=0; long left=1; long right=Long.MAX_VALUE-5; while(left<=right){ mid=(left+right)/2; if(find(mid)>=k)right=mid-1; else left=mid+1; } System.out.println(find(left)==k?left:-1); } }

浙公网安备 33010602011771号