- snjk
- coco
-
public class wode {
public static void main(String[]args){
int k=3;
int n=4;
for(int i=1;i<=k+1;i++)
for(int j=1;j<=i;j++)
System.out.println((n-i+1)+" "+(i-j)+" "+(j-1));
System.out.println();
}
}
希望能帮助你!!! 要想k n 能动态的输入值,就要从键盘输入数值,这个也挺好弄的,希望你能多多的自己动手!!
- 康康map
-
要用到递归,这个可不容易呢
- cloud123
-
就给50分吗?
还往上+吗?
你这个问题属于“单位系数一次不定方程”
- meira
-
import java.util.ArrayList;
import java.util.List;
public class Ex2_2 {
public static void main(String[] args) throws Exception {
String a = null;
String b = null;
if(args == null || args.length == 0){
throw new Exception("NO parameter found!");
}
a = args[0].trim();
b = args[1].trim();
//String a = "abcrdabcaabc"; //only for testing
//String b = "abc"; //only for testing
String backup = new String(a);
int offset = 0;
List<Integer> list = new ArrayList<Integer>();
while(true){
int index = a.indexOf(b);
if(index == -1){
break;
}
list.add(new Integer(index + offset));
offset += index + 3;
a = a.substring(index+3);
}
a = backup;
System.out.println(a);
if(list.size() == 0){
System.out.println(b + " not found in " + a);
System.exit(1);
}
for(int i = 0; i < a.length(); i++){
if(list.contains(i)){
System.out.print("^");
}else{
System.out.print(" ");
}
}
}
}
-----------测试1 abcrdabcaabc abcdef
abcrdabcaabc
abcdef not found in abcrdabcaabc
---------tetin 2 abcrdabcaabc abc
abcrdabcaabc
^ ^ ^
空格在这里显示问题,第二个在java里面是正确的。
- 再也不做稀饭了
-
(16点发的有点问题改了下)
基本样子算是出来了,但打印出来的顺序有点不对,自己调吧。
还有这个程序输入数据太大时会内存溢出,用C写的话可能性能会好点。
希望对你有点帮助
import java.util.Scanner;
public class mathtest2 {
/***
* @see 实现公式x_1 + x_2 + x_3 + ... + x_k = n
* 如果k为3,n为4
那么要出来这个样子
x_1 x_2 x_3
4 0 0
3 1 0
3 0 1
2 2 0
2 1 1
2 0 2
1 3 0
1 2 1
1 1 2
1 0 3
0 4 0
0 3 1
0 2 2
0 1 3
0 0 4
* @param n 总和
* @param k 确定相加数字的个数
*/
public static void print(int n,int k){
String str = getResultStr(n, k);
if(str!=null&&str.length()>0){
str = str.substring(0,str.length()-1);
String[] strArr =str.split(";");
System.out.println("============result===========");
for (int i = 1; i <= k; i++) {//标题行
System.out.print("x_"+i+" ");
}
System.out.println();
for (int i = 0; i < strArr.length; i++) {
System.out.println(strArr[i]);
}
System.out.println("============result===========");
}else{
System.out.println("无数据");
}
}
public static String getResultStr(int n,int k){
int [] value = new int[k];//每行的数字
int sum = 0;
int weizhi =value.length-1;
StringBuffer resultsb = new StringBuffer();
if (n>0) {
if (k>1) {
for (int i = n; i>=0; i--) {//遍历第一列
//获得第一列数字
value[0] = i;
//开始递归计算,遍历第一列以后的列
digui(n,value,weizhi,sum,resultsb);
//设置除第一个元素外数组的其他所有元素值为0(初始化)
for (int j = 0; j < value.length; j++) {
if (j!=0)
value[j]=0;
}
}
}else if(k==1){
value[0]= n;
getArrStr(value, resultsb);
}
}else{
getArrStr(value, resultsb);
}
return resultsb.toString();
}
public static void digui(int n,int[] value,int weizhi,int sum,StringBuffer resultsb){
while (end(value, n)&&weizhi!=0) {//递归结束条件
for (int j = 0; j <= n; j++) {//01..n
if (weizhi==value.length-1) {
value[weizhi] = j;
testPrint(value);
sum = getSum(value);
if(sum == n){
getArrStr(value, resultsb);
}
sum = 0;
if(j==n){
if (end(value, n)) {
for (int k = weizhi; k <= value.length-1; k++) {
value[k] = 0;
}
}
weizhi--;
}
}
}
if (weizhi!=value.length-1&&weizhi!=0) {
if (value[weizhi]<=n) {
if(value[weizhi]<n){
value[weizhi]+=1;
weizhi = value.length-1;
digui(n, value, weizhi, sum, resultsb);
}else{
if (end(value, n)) {
for (int k = weizhi; k <= value.length-1; k++) {
value[k] = 0;
}
}
weizhi--;
digui(n, value, weizhi, sum, resultsb);
}
}
}
}
}
/**
* @see 求和
* @return
*/
public static int getSum(int[] arr){
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
/**
* @see 获得达到要求的数字组合字符串(如k=3,n=6时,1+2+3=6,获得字符串"1,2,3;")
* @return
*/
public static void getArrStr(int[] arr,StringBuffer sb){
for (int i = 0; i < arr.length; i++) {
if (i==arr.length-1)
sb.append(arr[i]+";");
else
sb.append(arr[i]+" ");
}
}
/**
* 递归结束条件
* @return
*/
public static boolean end(int[] value,int n){
boolean flag = false;
for (int i = 1; i < value.length; i++){//遍历数组,(除第一列外)当每列数组元素值都为最大值n则结束递归返回false
if (value[i]!=n)
flag = true;
}
return flag;
}
/**
* @see 调试用
* @param value
*/
public static void testPrint(int[] value){
for (int i = 0; i < value.length; i++) {
System.out.print(value[i]+",");
}
System.out.println();
}
public static void main(String[] args) {
int n = 0;
int k = 0;
Scanner sc = new Scanner(System.in);
System.out.println("实现公式x_1 + x_2 + x_3 + ... + x_k = n");
try{
System.out.println("请输入n(>=0的整数):");
n = Integer.parseInt(sc.nextLine());
System.out.println("请输入k(>=0的整数):");
k = Integer.parseInt(sc.nextLine());
}catch (Exception e) {
// e.printStackTrace();
System.out.println("n和k必须为大于0的数字!");
}
print(n, k);
}
}
- wpBeta
-
手机解答的排版见谅…for(int i=1;i<=k+1;i++) for(int j=1;j<=i;j++) sys………print((n-i+1)+" "+(i-j)+" "+(j-1); sys………println();