蓝桥杯算法训练<二>
一、最小乘积(基本型)【这个题需要认真阅读试题,内容量较大,刚开始的时候,由于练习系统上给出的输入输出的格式有问题,没看懂,最后在MikCu的博客上看到了正确的格式,参考了代码,最终得到正确的结果。为了让结果最小,可以先分别对两组数进行排序,然后对其中的一组数据逆序,逆序后,把两组数据最大的与最小的相乘,最后求得的和最小!】
请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。
例如两组数分别为:1 3 -5和-2 4 1
那么对应乘积取和的最小值应为:
(-5) * 4 + 3 * (-2) + 1 * 1 = -25
n<=8,T<=1000
import java.util.Arrays;
import java.util.Scanner; public class Main {
static Scanner mScanner; public static void main(String[] args) { mScanner = new Scanner(System.in);
int n = mScanner.nextInt(); int[] sum = new int[n];
for (int i = 0; i < n; i++) {
sum[i] = getMaxSum();
}
for (int i = 0; i < n; i++) {
System.out.println(sum[i]);
} } public static int getMaxSum() {
int count = mScanner.nextInt();
int[] array1 = new int[count];
int[] array2 = new int[count];
for (int i = 0; i < count; i++) {
array1[i] = mScanner.nextInt();
}
for (int j = 0; j < count; j++) {
array2[j] = mScanner.nextInt();
}
32 Arrays.sort(array1);
33 Arrays.sort(array2);
34 array2 = getReverse(array2); int sum = 0;
for (int i = 0; i < count; i++) {
sum = array1[i] * array2[i] + sum;
} return sum;
} public static int[] getReverse(int[] arr) {
int length = arr.length;
int[] array = new int[length];
for (int i = 0; i < arr.length; i++) {
array[i] = arr[length - 1];
length--;
} return array;
} }
二、Torry的困惑(基本型)【此题的关键是保存素数的积对50000取余的结果,如果保留乘积的话,会造成数据过大,内存溢出等问题……】
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner mScanner = new Scanner(System.in);
int n = mScanner.nextInt();
int i = 0;
int start = 2;
int ss = 1;
while(i<n){
if (isSushu(start)) {
ss = (ss*start)%50000;
i++;
}
start++;
}
System.out.println(ss);
} public static boolean isSushu(int m){
for (int i = 2; i*i <= m; i++) {
if (m%i==0) {
return false;
}
}
return true; } }
三、寻找数组中最大值【此题求最大值不能使用sort()函数了,因为要输出其下标,所以此处使用的是循环,不过我刚刚想到了一个方法,就是先使用sort函数对原数组的备份进行排序,然后得到最大值,在原数组上使用getIndex()方法得到其索引,此方法应该可行。】
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner mScanner = new Scanner(System.in);
int n = mScanner.nextInt();
int[] arrays = new int[n];
for (int i = 0; i < n; i++) {
arrays[i] = mScanner.nextInt();
} int max = Integer.MIN_VALUE;
int maxIndex =0;
for (int i = 0; i < arrays.length; i++) {
if (arrays[i] > max) {
max = arrays[i];
maxIndex = i;
}
} System.out.println(max+" "+maxIndex); } }
四、关联矩阵【】
接下来m行,每行两个整数a、b,表示图中有(a,b)边。
注意图中可能含有重边,但不会有自环。
1 2
3 1
1 5
2 5
2 3
2 3
3 2
4 3
5 4
-1 0 0 1 1 1 -1 0 0
0 1 0 0 -1 -1 1 -1 0
0 0 0 0 0 0 0 1 -1
0 0 -1 -1 0 0 0 0 1
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner mScanner = new Scanner(System.in);
int n = mScanner.nextInt();//dian
int m = mScanner.nextInt();//bian
int[][] array = new int[n][m];
int x,y;
for (int i = 0; i < m; i++) {
x = mScanner.nextInt();
y = mScanner.nextInt();
array[x-1][i] =1;
array[y-1][i] =-1;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
} } }
注:本文系原创,首发于博客园,转载请注明出处。
蓝桥杯算法训练<二>的更多相关文章
- Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...
- Java实现蓝桥杯 算法训练 大等于n的最小完全平方数
试题 算法训练 大等于n的最小完全平方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平 ...
- 蓝桥杯算法训练 java算法 表达式求值
问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...
- java实现 蓝桥杯 算法训练 Password Suspects
问题描述 在年轻的时候,我们故事中的英雄--国王 Copa--他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好记又难以破解.后来,他才知道这种密码是一个长度为奇数 ...
- 蓝桥杯 算法训练 Torry的困惑(基本型)(水题,筛法求素数)
算法训练 Torry的困惑(基本型) 时间限制:1.0s 内存限制:512.0MB 问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7……这样的数叫做质数.Torry突 ...
- 蓝桥杯 算法训练 区间k大数查询(水题)
算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. ...
- 蓝桥杯--算法训练 区间k大数查询
算法训练 区间k大数查询 时间限制:1.0 ...
- 蓝桥杯 算法训练 ALGO-116 最大的算式
算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量 ...
- 蓝桥杯算法训练 区间k大数查询
算法训练 区间k大数查询 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个 ...
- 蓝桥杯 算法训练 ALGO-15 旅行家的预算
算法训练 旅行家的预算 时间限制:1.0s 内存限制:256.0MB 问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车 ...
随机推荐
- 【C++】大数的+-*/四则运算
所谓大数,则指数值特别大的数,可能会有99位,100位,远远超过了long long表示的范围. 这样的数作四则运算,需要用到字符串.用字符串通过每一位的字符的四则运算来模拟. 废话少说,上代码: # ...
- 怎么在一个list集合里面筛选重复的数据,在重复的数据中取最后添加的那条数据
1.先将集合进行分组(分组字段)2.在判断分组的数量是否大于 03.大于0,则有重复的数据
- HibernateTemplate 常用方法
HibernateTemplate 提供非常多的常用方法来完成基本的操作,比如通常的增加.删除.修改.查询等操作,Spring2.0更增加对命名SQL查询的支持,也增加对分页的支 持.大部分情况下,使 ...
- Swift和Objective-C的差异性
1:Type Swift提供了类型推断,不需要人工的去注释变量的类型信息,编译器会通过变量的值来推断类型.例如,编译器可以自动将该变量设置为字符串: // 自动推断,不显示 var name1 = & ...
- Permutations,Permutations II,Combinations
这是使用DFS来解数组类题的典型题目,像求子集,和为sum的k个数也是一个类型 解题步骤: 1:有哪些起点,例如,数组中的每个元素都有可能作为起点,那么用个for循环就可以了. 2:是否允许重复组合 ...
- JQuery实现 checkbox 全选、反选,子checkbox有没选去掉全选
1. 全选的checkbox选中时,子checkbox全部选中.反之,全部不选 2.子checkbox中,只要有没有被选中的,取消全选checkbox的选中 3.子checkbox的数量和子check ...
- Linux定时任务Crontab命令详解
linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ...
- Python 提示 no module named win32api
Windows下运行Python程序 提示错误 说是没有win32api的模块 解决办法 : 安装pywin32对应于Python的版本 可从https://sourceforge.net/pro ...
- 安装solaris_11.2与windows双系统(VM10模拟实现)(二)
下面我们在虚拟机下安装双系统 1.首先我们新建一个虚拟机 新建的时候一定要注意客户机操作系统应选择solaris,不然不行: 新建完成后我们先分两个分区,这里我先从U盘启动进去(也可以用xp/win7 ...
- jQuery验证控件(转载)
转自:http://www.cnblogs.com/hejunrex/archive/2011/11/17/2252193.html 官网地址:http://bassistance.de/jquery ...