/*
* 最大k乘积
题目描述
设I是一个n位十进制整数。如果将I划分为k段,则可得到k个整数。这k个整数的乘机称I的一个k乘积。试设计一个算法,对于给定的I和k,求出I的最大乘积。
输入描述
第一行有两个整数n和k。整数n是序列的长度,整数k是分割的段数。在接下来的一行中是一个n位十进制整数(n<=10)
输出描述
第一行的数是计算出的最大k乘积。
输入样例
2 1
15
输出样例
15
*/
package exam4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author 朱小波
*/
public class Test1 {
long arrayX[][] = new long[50][10];
long arrayY[][] = new long[50][10];
public long maxResult(int n, int k) {
int i, j, d, s;
long temp, max;
for (i = 1; i <= n; i++) {
arrayX[i][1] = arrayY[1][i];
}
for (i = 1; i <= n; i++) {
for (j = 2; j <= k; j++) {
if (i >= j) {
max = 0;
for (d = 1; d < i; d++) {
if ((temp = arrayX[d][j - 1] * arrayY[d + 1][i]) > max) {
max = temp;
}
}
arrayX[i][j] = max;
}
}
}
return arrayX[n][k];
}
public static void main(String[] args) {
int[] date;
int i, j;
int a[] = new int[50];
Test1 test = new Test1();
date = InOutPut.inPutInt(" ");//n date[0],k date[1]
String dat = InOutPut.inPutString();
for (int k = 1; k <= dat.length(); k++) {
a[k] = Integer.parseInt(String.valueOf(dat.charAt(k - 1)));
}
for (i = 1; i <= date[0]; i++) {
test.arrayY[i][i] = a[i];
for (j = i + 1; j <= date[0]; j++) {
test.arrayY[i][j] = test.arrayY[i][j - 1] * 10 + a[j];
}
}
System.out.println(test.maxResult(date[0], date[1]));
}
}
class InOutPut {
/**
* @return 已s隔开字符串存到数组中
* @输入
*/
public static String[] inPutString(String s) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
try {
str = br.readLine();
} catch (IOException ex) {
Logger.getLogger(InOutPut.class.getName()).log(Level.SEVERE, null, ex);
}
String strArray[] = str.split(s);
return strArray;
}
/**
* @return 字符串
* @输入
*/
public static String inPutString() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
try {
str = br.readLine();
} catch (IOException ex) {
Logger.getLogger(InOutPut.class.getName()).log(Level.SEVERE, null, ex);
}
return str;
}
/**
*
* @return 整数已s隔开字符串存到数组中
*/
public static int[] inPutInt(String s) {
String strArray[] = InOutPut.inPutString(s);
int intArray[] = new int[strArray.length];
for (int i = 0; i < strArray.length; i++) {
intArray[i] = Integer.parseInt(strArray[i]);
}
return intArray;
}
/**
*
* @return 输入整数
*/
public static int inPutInt() {
Scanner sc = new Scanner(System.in);
return sc.nextInt();
}
/**
* 输出
*/
static void outPutString(String str[]) {
for (int i = 0; i < str.length; i++) {
System.out.print(str[i] + " ");
}
}
static void outPutInt(int intArray[]) {
for (int i = 0; i < intArray.length; i++) {
System.out.print(intArray[i] + " ");
}
}
}
分享到:
相关推荐
最大K乘积问题: ...如果将I划分为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。试设计一个算法,对于给定的I和k,求出I的最大k乘积。 编程任务: 对于给定的I 和k,编程计算I 的最大k 乘积。
利用顺序栈将一个非负的十进制整数N转换为对应的B进制数。非负的十进制整数N和B都从键盘输入;转换结果从屏幕输出。
将非负十进制整数转化为八进制
设计算法把一个十进制整数转换为二至九进制之间的任意进制数输出。
本文实例讲述了C++实现十六进制字符串转换为十进制整数的方法。分享给大家供大家参考。具体实现方法如下: /* * 将十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值 */ #include #include...
C++写的顺序栈将一个非负的十进制整数N转换为对应的B进制数。 可进行1-16进制之间的数制转换。
进制转换 把一个任意的十进制正整数 N 转换成 d 进制数。 N 是一个正整数,d 是一个大于 1 小于 10 的整数,二者均由用户输入,且两数字用换行分隔。
给定一个十进制正整数N,程序输出从1到N的所有整数中,“1”出现的个数。C语言程序附带实验报告
利用Java编写程序,提示用户输入一个十进制整数,然后显示对应的二进制值。在这个程序中不要使用Integer.toBinaryString(int)
这是使用C语言和数据结构中栈的有关知识编写的C程序,具有较高的灵活性和实用性!可以将任意一个八进制整数转换成十进制数,非常好用!
设计算法把一个十进制整数转换为二到九进制之间的任意进制数输出(链式栈)
该程序的功能是: 运行程序后,读者可以任意输入一个十进制数,然后按回车键, 这时自动给出一个与之相对应的十六进制数
数制转换, 将一个十进制整数m转换成 →r(2-16)进制字符串,VB6.0源代码编写
本代码信息: 使用语言:java 功能:将整数(包括正负整数)转换成对应的二进制数,然后再控制台上显示。
编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,代码
本文利用数制转换原理,构造了超长十六进制整数到十进制整数变换的变换矩阵:进一步利用整数的进位原理推出了超长十六进制整数到十进制整数间的码-码变换公式,利用本变换最到可得到40位十进制整数。
任意输入一个十进制整数,包括正数负数,通过程序实现可以输出相应的二进制编码
设计算法把一个十进制整数转换为二至九进制之间的任意进制数输出
用java如何将十进制整数转成二进制和十六进制形式(csdn)————程序
输入一个十进制数n,把它转化为r进制数输出。输入数据包含多个测试实例,每个测试实例包含两个整数n和r