public class t1491 {
static int a[] = new int[3] ;
static int f[] = new int[3];
public static void main(String[] args) {
// TODO Auto-generated method stub
backtrack(0);
}
public static void backtrack(int depth)
{
if(depth==a.length)
{
for(int i=0; i<a.length;i++)
{
System.out.print(a[i]);
}
System.out.println();
}
for(int i=0;i<a.length;i++)
{
if(f[i]==0)
{
a[i]=i+1;
f[i]=1;
backtrack(depth+1);
f[i]=0;
}
}
}}为什么输出都是123?
static int a[] = new int[3] ;
static int f[] = new int[3];
public static void main(String[] args) {
// TODO Auto-generated method stub
backtrack(0);
}
public static void backtrack(int depth)
{
if(depth==a.length)
{
for(int i=0; i<a.length;i++)
{
System.out.print(a[i]);
}
System.out.println();
}
for(int i=0;i<a.length;i++)
{
if(f[i]==0)
{
a[i]=i+1;
f[i]=1;
backtrack(depth+1);
f[i]=0;
}
}
}}为什么输出都是123?
这个问题你把声明放在外面,然后实例化放在构造器或者主函数里面。比如
class a{
static int a[];
int n;
public void a(){
Scanner in=new Scanner(System.in);
n=in.nextInt;
a[] =new int[n];
}
}
你是不是想要
1
2
3
1
2
3
这样的效果?
for(int i=0; i<a.length;i++)
{
System.out.print(a[i]);
}
System.out.println();
改成
for(int i=0; i<a.length;i++)
{
System.out.println(a[i]);
}
如果理解错了,就说说你认为的应该是什么效果?然后回帖
#include <stdio.h>
int num[10];
int visit[10];
void dfs( int index ){
if( index==10 ){
int a = 100*num[1] + 10*num[2] + num[3];
int b = 100*num[4] + 10*num[5] + num[6];
int c = 100*num[7] + 10*num[8] + num[9];
if( a==2*b && a==3*c )
printf( "%d %d %d\n", a, b, c);
}
int i;
for( i=1; i<=9; i++){
if( visit[i]!=1 ){
visit[i]=1;
num[i] = index;
dfs(index+1); //深度搜索
visit[i] = 0; //回溯
}
}
}
int main (void)
{
int i;
for(i=0; i<10; i++)
visit[i] = 0;
dfs(1);
return 0;
}
//将1到9这九个数字分成3个三位数a,b,c,要求第1个三位数,正好是第2个三位数的两倍,是第3个三位数的三倍