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 条评论