问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。 请问当小明的蛋糕分完时,总共有多少个朋友分到了蛋糕。 输入格式 输入的第一行包含了两个整数n, k,意义如上所述。 第二行包含n个正整数,依次表示a1, a2, …, an。 输出格式 输出一个整数,表示有多少个朋友分到了蛋糕。 样例输入 6 9 2 6 5 6 3 5 样例输出 3 样例说明 第一个朋友分到了前3块蛋糕,第二个朋友分到了第4、5块蛋糕,第三个朋友分到了最后一块蛋糕。 评测用例规模与约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 10000,1 ≤ ai ≤ 1000。 解题过程:最开始把题给看错了,我给当成了把重量最小的优先给,然后怎么写都是0分,下次一定要看清楚题目要求。整体思路将蛋糕重量存入数组,然后定义一个新数组用于每次蛋糕重量加和,判断当cake重量大于等于k的时候,就把cake赋值给数组b,要求是有几个人分到了蛋糕,就判断b中有多少元素大于0,然后输出。第一次练习给的50分,然后百思不得其解,算法过程很清晰啊,运行也完全没有问题啊,为啥是50分,然后。。。。我把数组大小定义从100改到10001,然后就100分了,真的是醉了; |
package ccf;
import java.util.*;
public class Cake {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int k=in.nextInt();
int[] a=new int[10001];
for(int i=0;i<n;i++) {
a[i]=in.nextInt();
}
int cake=0;
int j=0;
int[] b=new int[10001];
for(int i=0;i<n;i++) {
if(cake<k) {
cake+=a[i];
}
else if(cake>=k){
b[j]=cake;
j++;
cake=0;
i--;
}
if(i==(n-1)){
b[j]=cake;
}
}
int count=0;
for(int i=0;i<n;i++) {
if(b[i]>0) {
count++;
}
}System.out.println(count);
}
}
特别说明i--的作用,因为是在for循环里面,判断条件不满足的时候就直接进行下一循环了,而当前的a[i]没有使用,所以使i--;
问题描述 在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。 给定一个整数序列,请找出这个整数序列的中间数的值。 输入格式 输入的第一行包含了一个整数n,表示整数序列中数的个数。 第二行包含n个正整数,依次表示a1, a2, …, an。 输出格式 如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。 样例输入 6 2 6 5 6 3 5 样例输出 5 样例说明 比5小的数有2个,比5大的数也有2个。 样例输入 4 3 4 6 7 样例输出 -1 样例说明 在序列中的4个数都不满足中间数的定义。 样例输入 5 3 4 6 6 7 样例输出 -1 样例说明 在序列中的5个数都不满足中间数的定义。 评测用例规模与约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。 解题思路:分别构建两个函数用于计算大于某个数的整数个数和小于某个数的整数个数,如果满足相等条件,则将这个数存进一个新数组,最后输出时需要加一个判断语句用于判断新数组中是否有重复元素,若有则不输出; |
package ccf;
import java.util.Scanner;
public class Number {
public static int Big_num(int[] a,int x,int n) {
int count=0;
for(int i=0;i<n;i++) {
if(a[i]>a[x])
count++;
}
return count-1;
}
public static int Little_num(int[] a,int x,int n) {
int count=0;
for(int i=0;i<n;i++) {
if(a[i]<a[x])
count++;
}
return count-1;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] arr=new int[n];
int[] x=new int [n];
int j=0;
for(int i=0;i<n;i++)
arr[i]=in.nextInt();
for(int i=0;i<n;i++) {
if(Big_num(arr,i,n)==Little_num(arr,i,n)) {
x[j]=arr[i];
j++;
}
}
if(x[0]==0)
System.out.println(-1);
else {
out:for(int i=0;i<n;i++) {
for(int k=i+1;k<n;k++) {
if(x[k]==x[i])
i++;
}
if(x[i]==0)
break out;
System.out.print(x[i]);
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)