0
点赞
收藏
分享

微信扫一扫

蓝桥杯Java——算法训练3

1.最大获利(数组)

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
long[][] a = new long[n][m];
long[][] b = new long[n][m];
long[][] c = new long[n][m];
for (int i = 0; i < n; i++) { // 服务生数据
for (int j = 0; j < m; j++) {
a[i][j] = scanner.nextInt();
}
}
for (int i = 0; i < n; i++) { // 客户数据
for (int j = 0; j < m; j++) {
b[i][j] = scanner.nextInt();
}
}
for (int i = 0; i < n; i++) { // 盈利数据
for (int j = 0; j < m; j++) {
c[i][j] = scanner.nextInt();
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (a[i][j] < b[i][j]) { // 服务生<客户
c[i][j] = a[i][j] * c[i][j]; // 服务*盈利
} else {
c[i][j] = b[i][j] * c[i][j]; // 客户 *盈利
}
}
}
for (int i = 0; i < n; i++) { // 1 2 3 第一层服务 3 2 1第二层服务
for (int j = m - 1; j >= 0; j--) { // 3 2 1 第一层客户 1 2 3第二层客户
for (int k = 0; k < j; k++) { // 盈利
if (c[i][k] < c[i][k + 1]) {
long t = c[i][k + 1];
c[i][k + 1] = c[i][k];
c[i][k] = t;
}
}
}
}
long ans = 0; // 找出两组时间数里盈利最大值
for (int i = 0; i < n; i++) {
long max = 0;
for (int j = 0; j < m; j++) {
if (max < c[i][j]) {
max = c[i][j];
}
}
ans += max;
}
System.out.println(ans);
}
}

 2.斐波那契串(递推)

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
String m=sc.next();
int i=0;
for(;i<n;i++) {
long sum=swap(i,m);
//如果字符串存在于指定字符串中,打破循环,使用斐波那契数列规律求出
if(sum==1) {
break;
}
}
long su=adds(i-1,n);
System.out.println(su);
}
//继续菲波那切数列规律进行计算
public static long adds(long m,long n) {
long a=0;
long b=1;
for(long j=m;j<=n;j++) {
long t=b;
b=b+a;
a=t;
}
return b-1;
}
//获取第一次出现子串的时候
public static long swap(long m,String s) {
String pre="0";
String cur="1";
for(int j=2;j<=m;j++) {
String t=cur;
cur=pre+cur;
pre=t;
}
//计算字串个数
long sum=0;
for(int i=0;i<cur.length()-s.length();i++) {
String str=cur.substring(i,i+s.length());
if(str.equals(s)) {
sum++;
}
}
return sum;
}
}
举报

相关推荐

0 条评论