[P2015问题概述]:偶数求和
/**
* 偶数求和
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 87871 Accepted Submission(s): 37068
Problem Description
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,
现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
Output
对于每组输入数据,输出一个平均值序列,每组输出占一行。
Sample Input
3 2
4 2
Sample Output
3 6
3 7
*
*/
代码演示(参考):
package ac;
import java.util.Scanner;
public class P2015{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextInt()){
int n=scanner.nextInt();
int m=scanner.nextInt();
int number=0,sum=0,x=2;
if(n%m!=0){
number=n/m+1;
}
else{
number=n/m;
}
int[]s=new int[number];
if(n%m==0){
for(int i=0;i<number;i++){
for(int j=0;j<m;j++){
sum+=x;
x=x+2;
}
s[i]=sum/m;
sum=0;
}
}
else{
for(int i=0;i<number;i++){
if(i==number-1){
for(int j=0;j<(n%m);j++){
sum+=x;
x=x+2;
}
s[i]=sum/(n%m);
}
else{
for(int j=0;j<m;j++){
sum+=x;
x=x+2;
}
s[i]=sum/m;
}
sum=0;
}
}
for(int i=0;i<number;i++){
if(i==number-1) System.out.println(s[i]);
else System.out.print(s[i]+" ");
}
}
}
}
[P2016问题概述]:数据的交换输出
/**
* 数据的交换输出
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 103988 Accepted Submission(s): 38870
Problem Description
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。
Input
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,
跟着就是n个整数。n=0表示输入的结束,不做处理。
Output
对于每组输入数据,输出交换后的数列,每组输出占一行。
Sample Input
4 2 1 3 4
5 5 4 3 2 1
0
Sample Output
1 2 3 4
1 4 3 2 5
Author
lcy
Source
C语言程序设计练习(三)
*/
代码演示:
package ac;
import java.util.Scanner;
public class P2016 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
if(n==0 ){
break;
}
int[]a=new int[n];
for(int i=0;i<a.length;i++){
a[i]=sc.nextInt();
}
int min=a[0];
int k=0;
for(int i=0;i<a.length;i++){
if(a[i]<min){
min=a[i];
k=i;
}
}
int temp=a[0];
a[0]=a[k];
a[k]=temp;
for(int i=0;i<a.length;i++){
if(i==0){
System.out.print(a[i]);
}else{
System.out.print(" "+a[i]);
}
}
System.out.println();
}
}
}
[P2017问题概述]:字符串统计
/**
* 字符串统计
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 81324 Accepted Submission(s): 44659
Problem Description
对于给定的一个字符串,统计其中数字字符出现的次数。
Input
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
Output
对于每个测试实例,输出该串中数值的个数,每个输出占一行。
Sample Input
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
Sample Output
6
9
*/
代码演示:
package ac;
import java.util.Scanner;
public class P2017 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
while(n-->0){
String str=sc.next();
char[] chs=str.toCharArray();
int count=0;
for(int i=0;i<chs.length;i++){
if(chs[i]>='0'&&chs[i]<='9'){
count++;
}
}
System.out.println(count);
}
}
}
[P2018问题概述]:母牛的故事
/***
* 母牛的故事
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 82698 Accepted Submission(s): 41082
Problem Description
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第n年的时候,共有多少头母牛?
Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
Sample Input
2
4
5
0
Sample Output
2
4
6
*/
代码演示:
import java.util.Scanner;
public class P2018 {
public static void main(String[] args) {
int a[] = new int[55];
a[1]=1;
a[2]=2;
a[3]=3;
a[4]=4;
for(int i=5;i<55;i++){
a[i]=a[i-1]+a[i-3];
}
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
if(n==0){
break;
}
System.out.println(a[n]);
}
}
}
[P2019问题概述]: 数列有序
/**
* 数列有序!
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 88953 Accepted Submission(s): 37361
Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。
n和m同时为0标示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
Sample Input
3 3
1 2 4
0 0
Sample Output
1 2 3 4
Author
lcy
*/
代码演示(1):
package ac;
import java.util.Arrays;
import java.util.Scanner;
public class P2019{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int m=sc.nextInt();
if(n==0 && m==0){
break;
}
int[] a=new int[n+1];
for(int i=0;i<a.length-1;i++){
a[i]=sc.nextInt();
}
a[a.length-1]=m;
Arrays.sort(a);
println(a);
}
}
private static void println(int[] a) {
for(int i=0;i<a.length;i++){
if(i==0){
System.out.print(a[i]);
}else{
System.out.print(" "+a[i]);
}
}
System.out.println();
}
}
代码演示(2):复杂方式
package ac;
import java.util.Scanner;
public class P2019 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int m=sc.nextInt();
if(n==0 && m==0){
break;
}
int[] a=new int[n];
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
}
dichotomySort(a, m);
System.out.println();
}
}
public static void print(int[] arr){
for(int i=0;i<arr.length;i++){
if(i==0){
System.out.print(arr[i]);
}else{
System.out.print(" "+arr[i]);
}
}
}
public static void dichotomySort(int[] arr,int m){
int[] temp=new int[arr.length+1];
int high=arr.length-1;
int low=0;
while(low<=high){
int mid=(high+low)/2;
if(m>arr[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
for(int i=0;i<temp.length;i++){
if(i<low){
temp[i]=arr[i];
}else if(i==low){
temp[i]=m;
}else{
temp[i]=arr[i-1];
}
}
print(temp);
}
}