给定两个整数 n,k。
请你输出一个 n 位数,要求其各位数字均为 k。
输入格式
共一行,包含两个整数 n,k。
输出格式
一个整数,表示满足要求的 n位数。
数据范围
前三个测试点满足 1≤n≤3。
所有测试点满足 1≤n≤100,1≤k≤9。输入样例:
3 2输出样例:
222
简单题直接看代码吧!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
for (int i=0;i<n;i++){
System.out.print(k);
}
}
}
我们规定,如果一个非负整数 a 满足以下两个条件之一,则称 a为美丽数:
- a=0
- a=10ˣ,其中 x为任意非负整数。
给定 n 个非负整数 a1,a2,…,an这其中有至少 n−1 个数是美丽数。
请你计算并输出 a1×a2×…×an的结果。
输入格式
第一行包含整数 n。
第二行包含 a1,a2,…,an。
输出格式
共一行,输出一个不含前导 00 的整数,表示 a1×a2×…×an 的结果。
前 3 个测试点满足 1≤n≤5。
所有测试点满足 1≤n≤10⁵,a1∼an 均为不含前导 00 的非负整数,并且这 n个数的总长度不超过 10⁵。
输入样例1:
3 5 10 1输出样例1:
50输入样例2:
4 1 1 10 11输出样例2:
110输入样例3:
5 0 3 1 100 1输出样例3:
0
10⁵个数相乘,建议使用BigInteger,直接暴力就完事了,不熟悉BigInteger可以看看下面这篇文章
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
BigInteger sum=new BigInteger("1");
BigInteger x=new BigInteger("1");
while (n-->0){
x=sc.nextBigInteger();
sum=sum.multiply(x);
}
System.out.println(sum);
}
}
给定一个正整数 m,请你统计一共有多少个正整数 n 满足,n 的阶乘的末尾连续 0 的数量恰好为 m。
输出满足条件的 n 的数量以及所有满足条件的 n。
例如,当 m=1时,满足条件的正整数 n共有 55 个,分别是 5,6,7,8,95,6,7,8,其中 5!=120,6!=720,7!=5040,8!=40320,9!=3628805!=120,6!=720,7!=5040,8!=40320,
9!=362880。
输入格式
共一行,一个正整数 m。
输出格式
如果存在满足条件的 n,则第一行输出满足条件的 n 的数量,第二行按从小到大的顺序输出所有满足条件的 n。如果不存在满足条件的 n,则输出一行
0即可。数据范围
前 55 个测试点满足 1≤m≤10。
所有测试点满足 1≤m≤10⁵。输入样例1:
1输出样例1:
5 5 6 7 8 9输入样例2:
5输出样例2:
0
5!=120, 10!=3628800, 15!=1307674368000,20!=2432902008176640000
25!=15511210043330985984000000
阶乘后面有几个零就是看这个阶乘里面有多少个5,25!里有6个五5,2*5=10,3*5=15,4*5=20,5*5=25。
import java.util.Scanner;
public class Main {
public static int calc(int x)
{
int res = 0;
while (x!=0){
res += x / 5;
x /= 5;
}
return res;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
for (int i = 0; i <= 5e5; i += 5 )
if (calc(i) == m)
{ System.out.println(5);
System.out.println(i+" "+(i+1)+" "+(i+2)+" "+(i+3)+" "+(i+4));
return;
}
else if (calc(i) > m)
break;
System.out.println(0);
}
}
给定三个整数 a,b,c,请你计算并输出 (a×b)/(b+c) 的值。
输入格式
共一行,包含三个整数 a,b,c。
输出格式
一个实数,表示结果。
结果保留四位小数。
数据范围
所有测试点满足 1≤a,b,c≤1000。
输入样例1:
100 50 50输出样例1:
50.0000输入样例2:
199 60 40输出样例2:
119.4000
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
System.out.printf("%.4f",(double)(a*b)/(b+c));
}
}
账本中记录了一种产品的 n条买卖记录。
记录分为两种,格式如下:
B p q,表示以 p 元/件的价格,买入 q 件该种商品。S p q,表示以 p 元/件的价格,卖出 q 件该种商品。任何卖出记录的交易价格都高于任何买入记录的交易价格。
也就是说,不会存在卖出记录和买入记录的交易价格相同的情况。
现在,请你对账本进行整理,对所有交易价格相同的记录进行合并,使得每个交易价格只存在一条记录,新记录的交易数量等于所有参与合并的旧记录的交易数量之和。
具体来说,如果账本中有 k 条记录的交易价格为 p,它们的交易数量分别为 q1,q2,…,qk,则将它们合并为一条新记录,新记录的交易价格仍为 p,交易数量为 q1+q2+…+qk。
注意:
- 合并为新记录后,参与合并的旧记录就从帐本中抹除了。
- 新纪录的交易类型(买入或卖出)保持不变,即与参与合并的旧记录保持一致。
- 不会存在卖出记录和买入记录的交易价格相同的情况。
整理完毕后,对于现有的所有记录,请你找到其中交易价格最低的 s 条卖出记录和交易价格最高的 s 条买入记录。
输入格式
第一行包含两个正整数 n,s。
接下来 n 行,每行包含一个记录,格式如题目描述。
输出格式
首先,按照交易价格从高到低的顺序,输出交易价格最低的 s 条卖出记录,每行一条,格式与输入相同。如果不足 s 条,则有多少输出多少。
然后,按照交易价格从高到低的顺序,输出交易价格最高的 s 条买入记录,每行一条,格式与输入相同。如果不足 s 条,则有多少输出多少。
数据范围
前 4 个测试点满足 1≤n≤6。
所有测试点满足 1≤n≤1000,1≤s≤50,0≤p≤10⁵,1≤q≤10⁴。输入样例:
6 2 B 10 3 S 50 2 S 40 1 S 50 6 B 20 4 B 25 10输出样例:
S 50 8 S 40 1 B 25 10 B 20 4
典型的HashMap题目,使用两个HashMap分别存储 买入和卖出记录,并都按照 交易价格从高到低进行排序。输出交易价格 最低的 s 条 卖出记录和交易价格 最高的 s 条 买入记录。
import java.security.KeyStore;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String l=sc.nextLine();
int n= Integer.parseInt(l.split(" ")[0]);
int s= Integer.parseInt(l.split(" ")[1]);
LinkedHashMap<Integer,Integer> mapS=new LinkedHashMap<>();
LinkedHashMap<Integer,Integer> mapB=new LinkedHashMap<>();
//输入添加进对应的LinkedHashMap
while (n-->0){
String S=sc.nextLine();
String[] ss=S.split(" ");
if (ss[0].equals("B")){
mapB.put(Integer.valueOf(ss[1]),mapB.getOrDefault(Integer.parseInt(ss[1]),0)+Integer.parseInt(ss[2]));
}else if (ss[0].equals("S")){
mapS.put(Integer.valueOf(ss[1]),mapS.getOrDefault(Integer.parseInt(ss[1]),0)+Integer.parseInt(ss[2]));
}
}
//按要求进行排序
ArrayList<Map.Entry<Integer, Integer>> listS = new ArrayList<>(mapS.entrySet());
listS.sort((o1, o2) -> o2.getKey() - o1.getKey());
ArrayList<Map.Entry<Integer, Integer>> listB = new ArrayList<>(mapB.entrySet());
listB.sort((o1, o2) -> o2.getKey() - o1.getKey());
//按要求进行输出
Iterator<Map.Entry<Integer, Integer>> iter = listS.iterator();
int i=0;
while(iter.hasNext()){
Map.Entry<Integer, Integer> item = iter.next();
if (i>=mapS.size()-s){
int key = item.getKey();
int value = item.getValue();
System.out.println("S "+key+" "+value);
}
i++;
}
Iterator<Map.Entry<Integer, Integer>> iter1 = listB.iterator();
i=s;
while(iter1.hasNext()){
Map.Entry<Integer, Integer> item = iter1.next();
if (i==0)
break;
int key = item.getKey();
int value = item.getValue();
System.out.println("B "+key+" "+value);
i--;
}
}
}
给定 n个区间,编号 1∼n。
其中,第 i 个区间为 [xi,xi]。
初始时,任意两个区间的交集为空。
对于每个区间,你都可以选择一个方向(向左或向右)对其进行扩展,当然也可以选择不对其进行扩展。每个区间最多只能扩展一次。
第 i 个区间的固定扩展长度为 lᵢ。
具体来说,对于第 i 个区间,你有三个选择:
具体来说,对于第 i 个区间,你有三个选择:
- 如果你选择使其向左扩展,那么它变为 [xᵢ−lᵢ,xᵢ]。
- 如果你选择使其向右扩展,那么它变为 [xᵢ,xᵢ+lᵢ]。
- 如果你选择不对其进行扩展,那么它仍保持 [xᵢ,xᵢ]不变。
我们希望尽可能多的区间能够得到扩展,但是必须保证所有扩展结束后,任意两个区间的交集为空仍然成立。请问,最多可以扩展多少个区间?
输入格式
第一行包含整数 n。
接下来 n 行,每行包含两个整数 xᵢ,lᵢ。
所有区间按照 xᵢ 从小到大的顺序给出。
数据范围
前 66 个测试点满足 1≤n≤⁵。
所有测试点满足 1≤n≤10⁵,1≤x1<x2<…<xn≤10⁹,1≤lᵢ≤10⁹。输出格式
一个整数,表示可以扩展的最大区间数量。
输入样例1:
5 1 2 2 1 5 10 10 9 19 1输出样例1:
3输入样例2:
5 1 2 2 1 5 10 10 9 20 1输出样例3:
4
贪心:尽量往左扩展,如果不行再尝试往右~尽可能多的扩展
第一个数和最后一个数肯定可以进行扩展,主要是考虑中间的数。
import java.util.Scanner;
public class Main {
static int N = 100005;
static int[][] dp = new int[N][2];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt(), ans = 0;
for (int i = 1; i <= t; i++) {
dp[i][0] = sc.nextInt();
dp[i][1] = sc.nextInt();
}
for (int i = 1; i <= t; i++) {
if (i == 1 || i == t) ans++;
else if (dp[i - 1][0] < dp[i][0] - dp[i][1]) ans++;
else if (dp[i][0] + dp[i][1] < dp[i + 1][0]) {
ans++;
dp[i][0] += dp[i][1];
}
}
System.out.println(ans);
}
}
文章目录问题B:芝华士威士忌和他的小猫咪们代码&注释问题C:愿我的弹雨能熄灭你们的痛苦代码注释问题D:猜糖果游戏代码注释问题E:有趣的次方代码注释问题F:这是一个简单题代码&注释问题G:打印矩阵代码注释问题H:scz的简单考验代码注释问题I:完美区间代码&注释问题J:是狂热的小迷妹一枚吖~代码&注释2022年10月23日周赛ZZULIOJ问题B:芝华士威士忌和他的小猫咪们时间限制:1Sec内存限制:128MB题目描述芝华士威士忌很喜欢带着他的猫咪们一块跑着玩。但是小猫咪们很懒,只有在离他y米以内才愿意和他一块跑。这天他在坐标为x的位置,他想和他的猫咪们一块跑着玩。有n个小猫咪,第i个小猫咪在坐
一位friend向我展示了(至少在googlechrome控制台中)以下语句打印为真:1/Math.pow(0.9999999999999999,Number.MAX_SAFE_INTEGER)===Math.E事实上,1/Math.pow(0.9999999999999999,Number.MAX_SAFE_INTEGER)是2.718281828459045。这不会是巧合吧?!有人能解释一下幕后发生了什么吗?根据wolframalpha,正确的值应该大约为1/0.40628,大约为2.4613566998129373--与Math.E相去甚远。(我假设wolframalpha的计算
我在表单上有一个字段采用以下值:-1、2-10、99我有一个与答案2-10有关的业务规则。我正在尝试编写一个匹配2-10但不99的正则表达式,但我遇到了麻烦。原表达:^2|3|4|5|6|7|8|9|10$失败,因为匹配了99(从技术上讲,匹配了两次)。此外,线边界是我从未感到舒服的东西。我观察到他们在expresso中的行为与我在其他地方(例如.net)中的行为不同。在此特定实例中,正则表达式在javascript中运行。无论如何,expresso似乎忽略了它们(如果我将值放在括号中:^[2|3|4|5|6|7|8|9|10]$^[2-9]$无论是“全部拼写”还是作为范围,如果我指定
如何在Golang中将float64转换为十六进制字符串(遵循c99标准)?-561.2863到-0x1.18a4a57a786c2p9 最佳答案 例如,packagemainimport("fmt""math/big")funcmain(){f:=new(big.Float).SetFloat64(-561.2863)fmt.Println(f)t:=f.Text('p',0)fmt.Println(t)g,ok:=new(big.Float).SetString(t)if!ok{fmt.Println("error")}fmt.
我有这个函数来执行http请求funcdo(r*http.Request)(response*http.Response,eerror){r.Header.Set(SessionHeader,client.SessionId)response,e=client.Do(r)ife!=nil{returnnil,e}ifresponse.StatusCode==http.StatusConflict{client.SessionId=response.Header.Get(SessionHeader)r.Header.Set(SessionHeader,client.SessionId)r
我正在尝试在R中解析以下XML文件:http://reports.ieso.ca/public/GenOutputCapability/PUB_GenOutputCapability_20140517_v24.xml到目前为止,我的脚本非常简单:file每当我运行它时,我的输出只是一个空列表。将此用于其他XML文件,我可以毫无问题地提取值,但对于这个特定文件,我无法提取任何内容。我已经尝试了许多不同的节点、大写字母、使用useInternal=FALSE以及我可以尝试的任何其他组合,但仍然没有成功。例如,我可以使用rootNode[["IMODocBody"]][["Date"]]语法
我有一个C99代码库,可以在Linux上使用GCC和Clang完美编译和运行;然而,在MinGW-w64(通过MSYS2安装)上,它会给出如下错误include/math3d.h:Infunction'matPerspective':include/math3d.h:577:1:error:parameternameomittedmatPerspective(floaty_fov,floataspect,floatnear,floatfar)^~~~~~~~~~~~~~include/math3d.h:577:1:error:parameternameomittedinclude/ma
我在windows平台上,有什么方法可以在c99模式下在命令行中编译程序,而不必在每个程序中键入-std=c99陈述?我当前的gcc版本是4.4.1。 最佳答案 gcc不提供通过例如环境变量指定命令行参数的方法。如果您想要-std=c99的效果,那么在某种程度上您将不得不使用该参数调用gcc命令。如果您从类Unix命令shell调用gcc,例如与Cygwin一起使用的命令shell,可能已经有一个c99命令。POSIX需要这样的命令(它将是gcc命令的包装器)。我目前没有安装Cygwin,所以我无法检查它。如果不存在,您可以定义一个
如何为Windows98创建.NET2.0应用程序的自动安装程序?我指的是应用程序,如果缺少,也指.NET2.0。我尝试通过为VisualStudio2008创建一个安装项目来做到这一点,但我没有成功。我手动安装了IE6SP1,但安装程序仍然崩溃。WindowsInstaller2.0已安装。在那里安装Installer3.0是不可能的。我在安装项目先决条件中取消选中安装程序,但仍然无法安装该应用程序-错误消息表明它需要更新版本的Windows。如何解决? 最佳答案 如果您打算部署到Windows9x或ME,请不要使用VisualS
到目前为止,在我的应用程序中,我一直支持从Windows98到WindowsNT/2000、XP到Vista的所有Windows版本。但由于在我的下一个版本中添加了Unicode,Windows98的支持仍然是可能的,但非常困难。我知道我的一些用户仍在运行Windows98。我不再支持Windows98的优点和缺点是什么? 最佳答案 放弃对Win98的支持会打开一整套新的Win32API,您可以在您的软件中使用这些API。这将使您能够在较新的操作系统上为大多数客户提供更好的体验。继续为Win98用户提供您的软件的当前版本,但明确表示