解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论

题目1、购物单

题目描述

小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。

这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。 取款机只能提供100元面额的纸币。小明想尽可能少取些现金,够用就行了。
你的任务是计算出,小明最少需要取多少现金。

以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。

**** 180.90 88折

**** 10.25 65折

**** 56.14 9折

**** 104.65 9折

**** 100.30 88折

**** 297.15 半价

**** 26.75 65折

**** 130.62 半价

**** 240.28 58折

**** 270.62 8折

**** 115.87 88折

**** 247.34 95折

**** 73.21 9折

**** 101.00 半价

**** 79.54 半价

**** 278.44 7折

**** 199.26 半价

**** 12.97 9折

**** 166.30 78折

**** 125.50 58折

**** 84.98 9折

**** 113.35 68折

**** 166.57 半价

**** 42.56 9折

**** 81.90 95折

**** 131.78 8折

**** 255.89 78折

**** 109.17 9折

**** 146.69 68折

**** 139.33 65折

**** 141.16 78折

**** 154.74 8折

**** 59.42 8折

**** 85.44 68折

**** 293.70 88折

**** 261.79 65折

**** 11.30 88折

**** 268.27 58折

**** 128.29 88折

**** 251.03 8折

**** 208.39 75折

**** 128.88 75折

**** 62.06 9折

**** 225.87 75折

**** 12.89 75折

**** 34.28 75折

**** 62.16 58折

**** 129.12 半价

**** 218.37 半价

**** 289.69 8折

需要说明的是,88折指的是按标价的88%计算,而8折是按80%计算,余者类推。

特别地,半价是按50%计算。

请提交小明要从取款机上提取的金额,单位是元。

答案是一个整数,类似4300的样子,结尾必然是00,不要填写任何多余的内容。

直接将购物单复制到eclipse里 然后选中购物单内容按Ctrl+F 将**换成+,将“折”换成空格,“半折”换成0.5,然后自己在数字前加和小数点

package 算法积累;

public class 购物单_蓝桥杯_八 {

	public static void main(String[] args) {
// TODO Auto-generated method stub
double sum = 180.90 *0.88
+ 10.25 *0.65
+ 56.14 *0.9
+ 104.65 *0.9
+ 100.30 *0.88
+ 297.15 *0.5
+ 26.75 *0.65
+ 130.62 *0.5
+ 240.28 *0.58
+ 270.62 *0.8
+ 115.87 *0.88
+ 247.34 *0.95
+ 73.21 *0.9
+ 101.00 *0.5
+ 79.54 *0.5
+ 278.44 *0.7
+ 199.26 *0.5
+ 12.97 *0.9
+ 166.30 *0.78
+ 125.50 *0.58
+ 84.98 *0.9
+ 113.35 *0.68
+ 166.57 *0.5
+ 42.56 *0.9
+ 81.90 *0.95
+ 131.78 *0.8
+ 255.89 *0.78
+ 109.17 *0.9
+ 146.69 *0.68
+ 139.33 *0.65
+ 141.16 *0.78
+ 154.74 *0.8
+ 59.42 *0.8
+ 85.44 *0.68
+ 293.70 *0.88
+ 261.79 *0.65
+ 11.30 *0.88
+ 268.27 *0.58
+ 128.29 *0.88
+ 251.03 *0.8
+ 208.39 *0.75
+ 128.88 *0.75
+ 62.06 *0.9
+ 225.87 *0.75
+ 12.89 *0.75
+ 34.28 *0.75
+ 62.16 *0.58
+ 129.12 *0.5
+ 218.37 *0.5
+ 289.69 *0.8;
System.out.println(sum);
} }

题目2、纸牌三角形

题目描述

A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。

下图就是一种排法(如有对齐问题,参看p1.png)。

   A
9 6

4 8

3 7 5 2

这样的排法可能会有很多。

如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?

请你计算并提交该数字。

注意:需要提交的是一个整数,不要提交任何多余内容。

public class Main {

	public static void main(String[] args) {
// TODO Auto-generated method stub
int cnt=0;
for(int a=1;a<=9;a++){
for(int b=1;b<=9;b++){
for(int c=1;c<=9;c++){
for(int d=1;d<=9;d++){
for(int e=1;e<=9;e++){
for(int f=1;f<=9;f++){
for(int g=1;g<=9;g++){
for(int h=1;h<=9;h++){
for(int i=1;i<=9;i++){
if(a!=b && a!=c && a!=d && a!=e && a!=f && a!=g && a!=h && a!=i &&
b!=c && b!=d && b!=e && b!=f && b!=g && b!=h && b!=i &&
c!=d && c!=e && c!=f && c!=g && c!=h && c!=i &&
d!=e && d!=f && d!=g && d!=h && d!=i &&
e!=f && e!=g && e!=h && e!=i &&
f!=g && f!=h && f!=i &&
g!=h && g!=i &&
h!=i){
if((a+b+d+f)==(a+c+e+i) && (a+b+d+f)==(f+g+h+i) && (a+c+e+i)==(f+g+h+i)){
cnt++;
}
}
}
}
}
}
}
}
}
}
}
System.out.println(cnt/3/2); //旋转3种,镜像2种
} }

题目3、承压计算

题目描述

X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。

每块金属原料的外形、尺寸完全一致,但重量不同。

金属材料被严格地堆放成金字塔形。

                             7
5 8
7 8 8
9 2 7 2
8 1 4 9 1
8 1 8 8 4 1
7 9 6 1 4 5 4
5 6 5 5 6 9 5 6
5 5 4 7 9 3 5 5 1
7 5 7 9 7 4 7 3 3 1
4 6 4 5 5 8 8 3 2 4 3
1 1 3 3 1 6 6 5 5 4 4 2
9 9 9 2 1 9 1 9 2 9 5 7 9
4 3 3 7 7 9 3 6 1 3 8 8 3 7
3 6 8 1 5 3 9 5 8 3 8 1 8 3 3
8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9
8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4
2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9
7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6
9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3
5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9
6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4
2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4
7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6
1 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 3
2 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 8
7 7 7 9 7 5 2 7 9 2 5 1 9 2 6 5 3 9 3 5 7 3 5 4 2 8 9
7 7 6 6 8 7 5 5 8 2 4 7 7 4 7 2 6 9 2 1 8 2 9 8 5 7 3 6
5 9 4 5 5 7 5 5 6 3 5 3 9 5 8 9 5 4 1 2 6 1 4 3 5 3 2 4 1
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X

其中的数字代表金属块的重量(计量单位较大)。

最下一层的X代表30台极高精度的电子秤。

假设每块原料的重量都十分精确地平均落在下方的两个金属块上,

最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上。

电子秤的计量单位很小,所以显示的数字很大。

工作人员发现,其中读数最小的电子秤的示数为:2086458231

请你推算出:读数最大的电子秤的示数为多少?

注意:需要提交的是一个整数,不要填写任何多余的内容。

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);

		double[][] a = new double[30][30];

		for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j <= i; j++) {
a[i][j] = in.nextDouble();
}
}
for (int i = 0; i < 29; i++) {
for (int j = 0; j <= i; j++) {
double avg = a[i][j] / 2.0;//平分
a[i + 1][j] += avg;
a[i + 1][j + 1] += avg;
}
} double minVal = Double.MAX_VALUE;
double maxVal = Double.MIN_VALUE; for (int i = 0; i < 30; i++) {
if (a[29][i] < minVal)
minVal = a[29][i];
if (a[29][i] > maxVal)
maxVal = a[29][i];
} System.out.println(2086458231.0 / minVal * maxVal);
}
}

题目4、魔方状态

题目描述

二阶魔方就是只有2层的魔方,只由8个小块组成。

如图p1.png所示。

小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色,如下:

前面:橙色

右面:绿色

上面:黄色

左面:绿色

下面:橙色

后面:黄色

请你计算一下,这样的魔方被打乱后,一共有多少种不同的状态。

如果两个状态经过魔方的整体旋转后,各个面的颜色都一致,则认为是同一状态。

请提交表示状态数的整数,不要填写任何多余内容或说明文字。

开始拿到这道题没什么思路,笔算算不来,模拟判重感觉太麻烦。大神说burnside引理可以做,学渣表示看不懂。。网上基本没有求解的,有的也答案不一。最后还是模拟判重这么写了。

我的答案:229878

测试:全同色魔方状态为1,正确。正常二阶魔方状态3674160,正确。

思路:其实就是空间状态搜索。模拟操作+判重。关于操作,二阶魔方只做U(顶层顺时针) R(右层顺时针) F(前层顺时针)就可以得到所有状态了。判重需要旋转整个魔方去比较。(判重小白现在只会用set)。

然后是,怎么去表示一个二阶魔方。二阶魔方8个块,一个块6面(看不见的作黑色考虑),所以我用了char st[8][7]去表示一个魔方。块的顺序如下:

上面的初始状态表示就是{{“oybbgb”},{“oygbbb”},{“bygbby”},{“bybbgy”},{“obbogb”},{“obgobb”},{“bbgoby”},{“bbbogy”}}

o表示橙色,b表示黑色,g表示绿色,y表示黄色。

对于一个小块,6个面的颜色定义顺序如下:

所以,比如说,上面题目给的魔方,前面一层,左上角的橙黄绿块,表示就是oybbgb

博主还是个小白,只能找来C++的代码,还望 Java大佬及时写出

#include <bits/stdc++.h>
using namespace std;
typedef char st[8][7];
st state[2000000];
set<string> all;
st begin={{"oybbgb"},{"oygbbb"},{"bygbby"},{"bybbgy"},{"obbogb"},{"obgobb"},{"bbgoby"},{"bbbogy"}};
//st begin={{"oooooo"},{"oooooo"},{"oooooo"},{"oooooo"},{"oooooo"},{"oooooo"},{"oooooo"},{"oooooo"}};
//只有一个颜色的魔方 ans=1
//st begin={{"rykkbk"},{"rygkkk"},{"kygkko"},{"kykkbo"},{"rkkwbk"},{"rkgwkk"},{"kkgwko"},{"kkkwbo"}};
//正常2阶魔方状态 r红 y黄 b蓝 g绿 w白 o橙 k黑(红对橙,白对黄,蓝对绿,颜色相近的相对)这里白为底 前为红
//需要将state大小改为4000000
//这个测试用例跑了20分钟左右 560M内存 ans=3674160 与实际二阶魔方状态数相同 见下截图
int front, tail;
void ucell(char *a){swap(a[0], a[2]); swap(a[2], a[5]); swap(a[5], a[4]);}
void rcell(char *a){swap(a[1], a[0]); swap(a[0], a[3]); swap(a[3], a[5]);}
void fcell(char *a){swap(a[2], a[1]); swap(a[1], a[4]); swap(a[4], a[3]);}
void u(st &s)//顶层顺时针旋转
{
ucell(s[0]);
ucell(s[1]);
ucell(s[2]);
ucell(s[3]);
swap(s[1], s[0]);
swap(s[2], s[1]);
swap(s[3], s[2]);
}
void uwhole(st &s)//整个魔方从顶部看 顺时针转 用于判重
{
u(s);
ucell(s[4]);
ucell(s[5]);
ucell(s[6]);
ucell(s[7]);
swap(s[5], s[4]);
swap(s[6], s[5]);
swap(s[7], s[6]);
}
void f(st &s)//前面一层 顺时针转
{
fcell(s[0]);
fcell(s[1]);
fcell(s[4]);
fcell(s[5]);
swap(s[1], s[5]);
swap(s[0], s[1]);
swap(s[4], s[0]);
}
void fwhole(st &s)//整个魔方从前面看 顺时针转 用于判重
{
f(s);
fcell(s[2]);
fcell(s[6]);
fcell(s[7]);
fcell(s[3]);
swap(s[2], s[6]);
swap(s[3], s[2]);
swap(s[7], s[3]);
}
void r(st &s)//魔方右层顺时针转
{
rcell(s[1]);
rcell(s[2]);
rcell(s[6]);
rcell(s[5]);
swap(s[2], s[1]);
swap(s[5], s[1]);
swap(s[6], s[5]);
}
void rwhole(st &s)//整个魔方从右边看 顺时针转 用于判重
{
r(s);
rcell(s[0]);
rcell(s[3]);
rcell(s[4]);
rcell(s[7]);
swap(s[3], s[7]);
swap(s[0], s[3]);
swap(s[4], s[0]);
}
string convert(st &s)//魔方状态二维字符数组 转化为string
{
string ss;
for(int i=0; i<8; i++)ss+=s[i];
return ss;
}
bool try_to_insert(int tail)//判重
{
st k;
memcpy((void*)k, (void*)state[tail], sizeof(state[tail]));
for(int i=0; i<4; i++)
{
fwhole(k);
for(int j=0; j<4; j++)
{
uwhole(k);
for(int q=0; q<4; q++)
{
rwhole(k);
if(all.count(convert(k))==1)
{
return false;
}
}
}
}
all.insert(convert(k));
return true;
}
int main()
{
front=0,tail=1;
all.insert(convert(begin));
memcpy((void*)state[0],(void*)begin,sizeof(begin));
while(front!=tail)
{
//对当前状态分别模拟三种操作U R F 然后判重
for(int i=0; i<3; i++)
{
memcpy((void*)state[tail], (void*)state[front], sizeof(state[front]));
if(i==0)
{
u(state[tail]);
if(try_to_insert(tail))tail++;
}
else if(i==1)
{
r(state[tail]);
if(try_to_insert(tail))tail++;
}
else if(i==2)
{
f(state[tail]);
if(try_to_insert(tail))tail++;
}
}
front++;
}
cout<<front<<endl;
return 0;
}
//ans 229878

题目5、取数位

求1个整数的第k位数字有很多种方法。
以下的方法就是一种。
还有一个答案:f(x/10,k--) public class Main { static int len(int x){ // 返回多少位
if(x<10) return 1;
return len(x/10)+1;
} // 取x的第k位数字
static int f(int x, int k){ //数字 第几位数23513 5-3=2
if(len(x)-k==0) return x%10; //如果是最后一位数
return (int) (x/Math.pow(10, len(x)-k)%10); //填空
} public static void main(String[] args)
{
int x = 295631;
//System.out.println(len(x));
System.out.println(f(x,4));
} }

题目6、最大公共子串

最大公共子串长度问题就是:

求两个串的所有子串中能够匹配上的最大长度是多少。

比如:“abcdkkk” 和 “baabcdadabc”,

可以找到的最长的公共子串是"abcd",所以最大公共子串长度为4。

下面的程序是采用矩阵法进行求解的,这对串的规模不大的情况还是比较有效的解法。

请分析该解法的思路,并补全划线部分缺失的代码。

这个有点dp的意思,分别计算两个字符串每一个字符到另一个字符是否相等 若相等 则加前面字符的最大字符串 若前面字符也分别相等则他就等于a[i-1][j-1]+1 若不想等则为0+1

public class 最大公共子串 {
static int f(String s1, String s2)
{
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray(); int[][] a = new int[c1.length+1][c2.length+1]; int max = 0;
for(int i=1; i<a.length; i++){
for(int j=1; j<a[i].length; j++){
if(c1[i-1]==c2[j-1]) {
a[i][j]=a[i-1][j-1]+1; //填空
if(a[i][j] > max) max = a[i][j];
}
}
} return max;
} public static void main(String[] args){
int n = f("abcdkkk", "baabcdadabc");
System.out.println(n);
}
}

题目7、日期问题

题目描述
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。 比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。 给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗? 输入
----
一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9) 输入
----
输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。 样例输入
----
02/03/04 样例输出
----
2002-03-04
2004-02-03
2004-03-02 资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。
import java.util.Arrays;
import java.util.Calendar;
import java.util.Scanner; class Main{
static boolean leap(int l)
{
if((l%4==0&&l%100!=0)||l%400==0)
return true;
return false;
}
public static void main(String[] args) {
Scanner in =new Scanner( System.in);
String s=in.nextLine();
int a=Integer.parseInt(s.substring(0, 2));
int b=Integer.parseInt(s.substring(3,5));
int c=Integer.parseInt(s.substring(6,8));
int[]z=new int[6];
z[0]=(2000+a)*10000+b*100+c;
z[1]=(1900+a)*10000+b*100+c;
z[2]=(2000+c)*10000+a*100+b;
z[3]=(2000+c)*10000+b*100+a;
z[4]=(1900+c)*10000+a*100+b;
z[5]=(1900+c)*10000+b*100+a;
int daycount[]={31,29,31,30,31,30,31,31,30,31,30,31};
Arrays.sort(z);
for(int i=0;i<6;i++)
{
int year=z[i]/10000;
int month=z[i]%10000/100;
int day=z[i]%100;
if(year<1960||year>2059)continue;
if(month<1||month>12)continue;
if(leap(year))daycount[1]=29;
else daycount[1]=28;
if(day<1||day>daycount[month-1])continue;
StringBuffer string=new StringBuffer(z[i]+"");
string.insert(4, '-');
string.insert(7, '-');
System.out.println(string); } }
}

题目8、包子凑数

题目描述

小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。

每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。

当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有3种蒸笼,分别能放4、5和6个包子。而顾客想买7个包子时,大叔就凑不出来了。

小明想知道一共有多少种数目是包子大叔凑不出来的。

输入

第一行包含一个整数N。(1 <= N <= 100)

以下N行每行包含一个整数Ai。(1 <= Ai <= 100)

输出

一个整数代表答案。如果凑不出的数目有无限多个,输出INF。

例如,

输入:

2

4

5

程序应该输出:

6

再例如,

输入:

2

4

6

程序应该输出:

INF

样例解释:

对于样例1,凑不出的数目包括:1, 2, 3, 6, 7, 11。

对于样例2,所有奇数都凑不出来,所以有无限多个。

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。

提交程序时,注意选择所期望的语言类型和编译器类型。

package com.sihai.test;

import java.util.Scanner;

public class test {
static int dp[] = new int[10000];
public static boolean judge(int x,int y)
{
int t;
while(y>0)
{
t=x%y;
x=y;
y=t;
}
if(x==1)
return true;
return false;
} public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a[] = new int[200];
int n = 0,i,j,res,mark;
n = scanner.nextInt();
while(true)
{
res=0;
mark=0;
for(i=1;i<=n;i++)
{
a[i] = scanner.nextInt();
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(judge(a[i],a[j]))
{
mark=1;
break;
}
}
if(mark==1)
break;
}
if(mark!=1)
{
System.out.println("INF");
continue;
}
dp[0]=1;
for(i=1;i<=n;i++)
for(j=1;j<10000;j++)
{
if(a[i]>j)
continue;
if(dp[j-a[i]]==1)
dp[j]=1;
}
for(i=0;i<10000;i++)
{
if(dp[i]!=1)
res++;
}
System.out.println(res);
}
}
}

题目9、分巧克力

题目描述

儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。

小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。

为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:

1. 形状是正方形,边长是整数

2. 大小相同

例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。

当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?

输入

第一行包含两个整数N和K。(1 <= N, K <= 100000)

以下N行每行包含两个整数Hi和Wi。(1 <= Hi, Wi <= 100000)

输入保证每位小朋友至少能获得一块1x1的巧克力。

输出

输出切出的正方形巧克力最大可能的边长。

样例输入:

2 10

6 5

5 6

样例输出:

2

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。

import java.util.Scanner;
class Cho {
int h;
int w;
public Cho(int h, int w) {
// TODO Auto-generated constructor stub
this.h = h;
this.w = w;
}
}
public class Main2 {
static int n, k;
static Cho[] cho;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
k = in.nextInt();
int low = 1;
int mid = 0;
int high = 100000;
cho = new Cho[n];
for (int i = 0; i < n; i++) {
int a = in.nextInt();
int b = in.nextInt();
cho[i] = new Cho(a, b);
}
// 二分,基本思路为暴力,从大到小能够保证最先出来的结果就是符合要求的最大情况
while (low < high -1) {
mid = (low + high) /2;
if (!judge(mid)) {
high = mid;
} else {
low = mid;
}
}
System.out.println(mid - 1); }
private static boolean judge(int l) {
// TODO Auto-generated method stub
int sum = 0;
for (int i = 0; i < n; i++) {
sum += (cho[i].h * cho[i].w) / (l * l);
if (sum >= k) {
return true;
}
}
return false;
}
}

题目10、K倍区间

题目描述

给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。

你能求出数列中总共有多少个K倍区间吗?

输入

第一行包含两个整数N和K。(1 <= N, K <= 100000)

以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)

输出

输出一个整数,代表K倍区间的数目。

例如,

输入:

5 2

1

2

3

4

5

程序应该输出:

6

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。

package com.sihai.test;

import java.util.Scanner;

public class test {
static int a[] = new int[100010];
static long dp[] = new long[100010]; public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n,k,i,j;
n = scanner.nextInt();
k = scanner.nextInt();
long res;
while(true)
{
dp[0]=0;
res=0;
for(i=1;i<=n;i++)
{
a[i] = scanner.nextInt();
dp[i]=dp[i-1]+a[i];
}
for(i=1;i<=n;i++)
{
for(j=0;j<=n-i;j++)
{
if((dp[j+i]-dp[j])%k==0)
res++;
}
}
System.out.println(res);
}
}
}

第八届蓝桥杯JavaB组省赛真题的更多相关文章

  1. 第十届蓝桥杯JavaB组省赛真题

    试题 A: 组队 本题总分:5 分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容. 每位球员担任 1 号位至 5 号位时的评分如下表所示. ...

  2. 第九届蓝桥杯JavaB组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.第几天 题目描述 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数 ...

  3. Java实现第十一届蓝桥杯JavaB组 省赛真题

    试题 A: 指数计算 本题总分:5 分 [问题描述] 7 月 1 日是建党日,从 1921 年到 2020 年, 已经带领中国人民 走过了 99 年. 请计算:7 ^ 2020 mod 1921,其中 ...

  4. 第六届蓝桥杯JavaB组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.三角形面积 题目描述 如图1所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何 ...

  5. 第四届蓝桥杯JavaB组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.世纪末星期 题目描述 曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破. 还有人称今后的某个世纪末的12月31日,如 ...

  6. 第八届蓝桥杯JavaC组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.外星日历 题目描述 某星系深处发现了文明遗迹. 他们的计数也是用十进制. 他们的文明也有日历.日历只有天数,没有年.月的概念. 有趣的 ...

  7. 第八届蓝桥杯JavaA组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.迷宫 题目描述 X星球的一处迷宫游乐场建在某个小山坡上. 它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母. ...

  8. 第七届蓝桥杯JavaB组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.煤球数量 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第 ...

  9. 第五届蓝桥杯JavaB组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的).他注意到:书的第10页和第11页在同一张纸上,但第 ...

随机推荐

  1. 多线程测试时的辅助类--CountDownLatch

    多线程时,很多时候由于mian线程与多线程结束时间不可控,造成无法测试 辅助测试类---CountDownLatch 我看的视频教程匿名内部类无法使用外部的变量,所以CountDownLatch定义为 ...

  2. 11JAVA基础-集合

    一.集合 ` 二.Collection类 Collection 是单列的顶层类. Collection是接口. 创建对象需要借助多态. //e为集合中数据类型 //ArrayList是List的实现类 ...

  3. 《学习笔记》.NET Core API搭建

    1.创建 ASP.NET Core Web程序,记住取消HTTPS配置 2.此时一个简单的.NET Core API 架子搭建好了,细心的人可以发现Properties下面不是CS文件,确是launc ...

  4. 我参与 Seata 开源项目的一些感悟

    丁老师在他的知识星球邀请我回答以下一个问题: 我觉得这个问题非常有意思,姑且把它贴到公众号这里,与大家分享一下我对这个问题的一些感悟. 感谢丁老师的邀请问答: 在这里我就简单说下,我这段时间参与 Se ...

  5. 10.1Go Mysql

    第十章 Go Mysql 准备好mysql数据库服务端数据. 创建test数据库 MariaDB [(none)]> create database test; Query OK, 1 row ...

  6. day05:数组与字典常识(20170217)

    #1:数组功能的使用:print ("a4A".isdecimal()) #print ("18".isdigit()) #判断是否是数字print (&quo ...

  7. package.json中^,~的区别

    https://blog.csdn.net/peaceoncemore/article/details/79195206 "devDependencies": {    " ...

  8. Redis设计原理简介

    学完MySQL InnoDB之后,又开始学习和研究Redis. 首先介绍下书:<Redis设计与实现>第二版 黄健宏著,机械工业出版社,388页,基于redis3.0版本.版本有点低,这个 ...

  9. python学习(12)使用正则表达式

    1.正则表达式知识 符号 解释 示例 说明 . 匹配任意字符 b.t 可以匹配bat / but / b#t / b1t等 \w 匹配字母/数字/下划线 b\wt 可以匹配bat / b1t / b_ ...

  10. 【Java_SSM】(二)使用eclipse创建一个Maven web工程

    这篇博文我们介绍一下如何利用eclipse创件一个maven web工程. (1)File--New--Other--Maven--Maven project 此处我们快速创建一个maven工程 点击 ...