1、裁纸刀
思路:这道题必然是要先切开四条边的,这4刀一定要加的,问题就是先横切还是竖着切了,
通过模拟,不管是先横着切还是竖着切,结果都是5刀,所以我们只需要计算一种方法即可。
这里我们选择先竖切再横切。
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有一个裁纸刀,每次可以将一张纸沿一条直线裁成两半。
小蓝用一张纸打印出两行三列共 6 个二维码,至少使用九次裁出来,下图给出了一种裁法。
在上面的例子中,小蓝的打印机没办法打印到边缘,所以边缘至少要裁 4 次。另外,小蓝每次只能裁一张纸,不能重叠或者拼起来裁。
如果小蓝要用一张纸打印出 20 行 22 列共 440 个二维码,他至少需要裁多少次?
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int row = 20,col = 22;
System.out.println(col-1+(col)*(row-1)+4);
}
}
2、刷题统计
思路:数据很大采用long型,先计算出当前题数能不能够满足整数周,如果满足整数周,那么求出有几个整数周*7就好了,如果不满足一周或者不是整数周的话,那么就通过后边的程序判断多出来的题数是在前五天内还是周六日,然后因为整数周的部分已经算了,再加上不满足的那么就是所有的天数。
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?
输入一行包含三个整数 a,b 和 n.
输出一个整数代表天数。
10 20 99
8
对于 50%50% 的评测用例, 1≤a,b,n≤10^6.
对于 100%100% 的评测用例, 1≤a,b,n≤10^18.
import java.util.Scanner;
import java.io.*;
public class 刷题统计 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static void main(String[] args) throws IOException{
String[]num = in.readLine().split(" ");
long a = Long.parseLong(num[0]);
long b = Long.parseLong(num[1]);
long n = Long.parseLong(num[2]);
long res = n/(a*5+b*2);//n题中包含多少可以分成整周的周数
res*=7;//先把整数周的天数算出来,如果不足一周或者多出整数周,其天数都能在后边所运算
n%=(a*5+b*2);//不在整周内多出的题数
if(n<=a*5){
while(n>0){
res++;
n-=a;
}
}
if(n>a*5){
res+=5;
n-=a*5;
while(n>0){
res++;
n-=b;
}
}
out.println(res);
out.flush();
in.close();
}
}
3、修剪灌木
偶数棵直接对称赋值,奇数棵,单独对中间赋值。
爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的 早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
一个正整数 N, 含义如题面所述。
输出 N 行, 每行一个整数, 第 i 行表示从左到右第 i 棵树最高能长到多高。
3
4
2
4
对于 30% 的数据, N≤10.
对于 100% 的数据, 1 4、K倍区间 前缀和思想,不过直接用会超时部分样例,所以要根据同余数定理来算,例如:(5-3)%2==0 转化为5%2==3%2 给定一个长度为 N 的数列,1,2,⋯A1,A2,⋯AN,如果其中一段连续的子序列 Ai,Ai+1,⋯Aj (i≤j ) 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。 你能求出数列中总共有多少个 K 倍区间吗? 第一行包含两个整数 N 和 K( 1≤N,K≤10^5 )。 以下 N 行每行包含一个整数 Ai ( 1≤Ai≤10^5 ) 输出一个整数,代表 K 倍区间的数目。 示例 输入 输出import java.util.Scanner;
import java.io.*;
public class 修剪灌木 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static void main(String[] args) throws IOException{
int N = Integer.parseInt(in.readLine());
int mid = N/2;
int[]nums = new int[N];
for(int i=0;i
题目描述
输入描述
输出描述
输入输出样例
5 2
1
2
3
4
5
6
运行限制
import java.util.Scanner;
import java.io.*;
public class K倍区间 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static void main(String[] args) throws IOException{
String []s = in.readLine().split(" ");
int N = Integer.parseInt(s[0]);
int K = Integer.parseInt(s[1]);
long[]nums = new long[N+1];
long[]arr = new long[N+1];
for(int i =1;i<=N;i++){
nums[i]=Long.parseLong(in.readLine());
}
for(int i =1;i<=N;i++){
arr[i] = arr[i-1]+nums[i];//前缀和
}
long sum = 0;
long []q = new long[N];
q[0]=1;
for(int i=1;i<=N;i++){
sum+=q[(int) (arr[i]%K)];
q[(int) (arr[i]%K)]++;//保存对应的余数个数
}
out.println(sum);
out.flush();
in.close();
}
}