100分求救:一个算法 在9~1这九个数字之间添加+-×÷符号和括号,使结果等于2002?九个数字的前后顺序不能变!希望能用程序表达出来,我想了想可能要到正则表达式吧,就是关于()的,可是我正则表达式不怎么想起来了(也可能不是用这个方法吧),谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to gogon() ----------------关键是算法,如果是试出来的,就没有多大意义。换一个数字,就要重新试 一个学长给C程序的算法#include <stdio.h> int left[10],mid[10],right[10]; int value[10]; int iffound; int sum; void f(int n) { int i,it; int flag1,flag2,exc1,exc2; if (n>1) { /* Choose 2 Number */ for(i=1;i<n;i++) { /* 2 Number Locations */ flag1=i; flag2=i+1; left[n]=value[flag1]; right[n]=value[flag2]; exc1=value[flag1]; exc2=value[flag2]; /* 4 Kinds of Caculation */ { /* + */ value[flag1]=value[flag1]+value[flag2]; mid[n]=1; for(it=flag2;it<=n-1;it++) value[it]=value[it+1]; /* Next N-1 */ f(n-1); /* Return Record */ for(it=n;it>flag2;it--) value[it]=value[it-1]; value[flag2]=exc2; value[flag1]=exc1; } { /* - */ value[flag1]=value[flag1]-value[flag2]; mid[n]=2; for(it=flag2;it<=n-1;it++) value[it]=value[it+1]; /* Next N-1 */ f(n-1); /* Return Record */ for(it=n;it>flag2;it--) value[it]=value[it-1]; value[flag2]=exc2; value[flag1]=exc1; } { /* * */ value[flag1]=value[flag1]*value[flag2]; mid[n]=3; for(it=flag2;it<=n-1;it++) value[it]=value[it+1]; /* Next N-1 */ f(n-1); /* Return Record */ for(it=n;it>flag2;it--) value[it]=value[it-1]; value[flag2]=exc2; value[flag1]=exc1; } { /* / */ if (value[flag2]!=0) { if (value[flag1]%value[flag2]==0) { value[flag1]=value[flag1]/value[flag2]; mid[n]=4; for(it=flag2;it<=n-1;it++) value[it]=value[it+1]; /* Next N-1 */ f(n-1); /* Return Record */ for(it=n;it>flag2;it--) value[it]=value[it-1]; value[flag2]=exc2; value[flag1]=exc1; } } } } } else { if (value[n]==sum) { iffound=iffound+1; printf("FOUND the %ith Method!\n",iffound); for(it=9;it>1;it--) { printf("%i",left[it]); if (mid[it]==1) printf("+"); if (mid[it]==2) printf("-"); if (mid[it]==3) printf("*"); if (mid[it]==4) printf("/"); printf("%i\n",right[it]); } } } } void main() { int i; printf("Input The Total Number(ex. 2002):"); scanf("%i",&sum); /* Initial */ for(i=9;i>=1;i--) value[10-i]=i; iffound=0; f(9); if (iffound==0) printf("No Found!\n"); } 优化:数字左右同时出现的括号没有意思,可以判断剔除 优化后:<(5*3)^7*5 <54296875次运算 ActionListener的鼠标监听问题 读着没有发现问题,可是编译不了,不知道哪错了,求解。 MappedByteBuffer 内存映射,直接宕机后物理文件没同步 图形用户界面怎么样插入一个IE页面: 如何输入一个拥有8列或大一些的文本框 [请教] 为什么java中,有的方法类直接可以调出来,有的却必须new对象才能调出来! 很简单,100分求助JCheckBox的问题 应聘中间件开发人员时碰到的两到面试题!!! 请问java方面有哪些论坛(英文)人气比较旺 程序员JAVA版还能出吗? 如何开发自定义表单的功能 请问大家如何实现聊天室中,信息显示的界面。
----------------
关键是算法,如果是试出来的,就没有多大意义。换一个数字,就要重新试
#include <stdio.h>
int left[10],mid[10],right[10];
int value[10];
int iffound;
int sum; void f(int n)
{
int i,it;
int flag1,flag2,exc1,exc2; if (n>1)
{
/* Choose 2 Number */
for(i=1;i<n;i++)
{
/* 2 Number Locations */
flag1=i;
flag2=i+1;
left[n]=value[flag1];
right[n]=value[flag2];
exc1=value[flag1];
exc2=value[flag2]; /* 4 Kinds of Caculation */
{
/* + */
value[flag1]=value[flag1]+value[flag2];
mid[n]=1;
for(it=flag2;it<=n-1;it++)
value[it]=value[it+1];
/* Next N-1 */
f(n-1);
/* Return Record */
for(it=n;it>flag2;it--)
value[it]=value[it-1];
value[flag2]=exc2;
value[flag1]=exc1;
}
{
/* - */
value[flag1]=value[flag1]-value[flag2];
mid[n]=2;
for(it=flag2;it<=n-1;it++)
value[it]=value[it+1];
/* Next N-1 */
f(n-1);
/* Return Record */
for(it=n;it>flag2;it--)
value[it]=value[it-1];
value[flag2]=exc2;
value[flag1]=exc1;
}
{
/* * */
value[flag1]=value[flag1]*value[flag2];
mid[n]=3;
for(it=flag2;it<=n-1;it++)
value[it]=value[it+1];
/* Next N-1 */
f(n-1);
/* Return Record */
for(it=n;it>flag2;it--)
value[it]=value[it-1];
value[flag2]=exc2;
value[flag1]=exc1;
}
{
/* / */
if (value[flag2]!=0)
{
if (value[flag1]%value[flag2]==0)
{
value[flag1]=value[flag1]/value[flag2];
mid[n]=4;
for(it=flag2;it<=n-1;it++)
value[it]=value[it+1];
/* Next N-1 */
f(n-1);
/* Return Record */
for(it=n;it>flag2;it--)
value[it]=value[it-1];
value[flag2]=exc2;
value[flag1]=exc1;
}
}
}
}
}
else
{
if (value[n]==sum)
{
iffound=iffound+1;
printf("FOUND the %ith Method!\n",iffound);
for(it=9;it>1;it--)
{
printf("%i",left[it]);
if (mid[it]==1)
printf("+");
if (mid[it]==2)
printf("-");
if (mid[it]==3)
printf("*");
if (mid[it]==4)
printf("/");
printf("%i\n",right[it]);
}
}
}
}
void main()
{
int i; printf("Input The Total Number(ex. 2002):");
scanf("%i",&sum); /* Initial */
for(i=9;i>=1;i--)
value[10-i]=i; iffound=0; f(9); if (iffound==0)
printf("No Found!\n");
}
优化后:<(5*3)^7*5 <54296875次运算