问各位大神一个算法问题.. 给出两个数组A=[a0, a1, a2,...,an-1]和B[b0,

【求助】各位大神,小的求助一个关于C语言字符串数组的问题。谢谢_百度知道
【求助】各位大神,小的求助一个关于C语言字符串数组的问题。谢谢
b3&b1&quot,&d4&;a1&quotuchar strNum[16][2]={&quot,&;a4&。比如a1;d2&c2&quot,&d1&,&;c4&quot,&;c1&b2&quot,&b4&quot,&a2&quot,&quot,&quot,&,请问我怎么调用单个元素呢;;;;},&,&quot,&;d3&c3&;。请给出具体表征的代码;;a3&quot,&quot,&。我定义了一个这样的字符串数组
提问者采纳
你后面赋值的数字默认是从左往右,所以最大是strNum[15][1],从上到下.以此类推.
[0][1][1][0]
[1][1][2][0]
[2][1][3][0]
strNum是个16行2列的二维数组,因为第一个数字是0
提问者评价
来自团队:
其他类似问题
为您推荐:
其他4条回答
如果没有这么多字符;0&quot,分成16行2列,然后依此数下去,第一行是0行。你把这些字符,后面的就是&&#92调用a1就是a[0][0],有两个元素
大神,还是不行啊。调用strNum[0]时,显示出“a1a2a3a4b1b2b3b4c1c2c3c4d1d2d3d4”,调用strNum[1]时,显示出“a2a3a4b1b2b3b4c1c2c3c4d1d2d3d4”,以此类推,但我的原意是显示出“a1”“a2”来,谢谢。
#include&stdio.h&void main(){ char strNum[16][2] =
{ &a1&, &a2&, &a3&, &a4&, &b1&, &b2&, &b3&, &b4&, &c1&, &c2&, &c3&,
&c4&, &d1&, &d2&, &d3&, &d4& }; printf(&%c%c%c%c&, strNum[0][0], strNum[0][1], strNum[1][0], strNum[1][1]);}
/* 分别输出a1a2这四个字符 */
我是用来单片机串口通信的。还是要谢谢你
uchar strNum[16][2]={&a1&,&a2&,&a3&,&a4&,&b1&,&b2&,&b3&,&b4&,&c1&,&c2&,&c3&,&c4&,&d1&,&d2&,&d3&,&d4&};uchar x=strNum[0][0];
大神,还是不行啊。调用strNum[0]时,显示出“a1a2a3a4b1b2b3b4c1c2c3c4d1d2d3d4”,调用strNum[1]时,显示出“a2a3a4b1b2b3b4c1c2c3c4d1d2d3d4”,以此类推,但我的原意是显示出“a1”“a2”来,谢谢。
把你的双引号都改成单引号
strNum[0]就是a1
a1 就是 strNum[0][0]
字符串数组的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁苹果中国区从两周前开始,电影和图书商店就处在关闭状态了,令人不得不担忧中国区的一...
拆解这款MacBook的难度很高,不建议普通用户折腾。
游戏将故事的发生地设计在一个远离尘世的小村庄里。原本宁静和谐的生活有一天随着一伙...
好在现在还在测试阶段,就是不知道正式版会不会让人失望。
Apple Music的燎原之势或许很快就会展现出来。
再过大约10小时,我们就可以看到苹果在上一季度的业绩了,不知道结果会是如何。
讲真,今年的 iPhone 7 如果仍然是 16GB 起步,苹果可能要流失一些用户。
有这样的一个Smart Connector,第三方配件厂商是要好好利用。
刀塔的故事背景我想不少朋友已经很熟悉,再重复灌输难免显得有些啰嗦,详细的剧情小...
随着《World of Goo(粘粘世界)》的大火,手游市场上的“一键游戏”也开始逐渐被玩家...
《黏球传说(Goo Saga)》是 TokaLoka 推出的一款画面和玩法都极具吸引力的作品,玩家...
游戏采用了像素风格的画面设计,而且游戏是以横版作为表现形式,利用这样的一种视角,...
不得不说现在国人自己做的英语学习应用真的是越来越讲究创意了,上周给大家推荐了一个...
近日,游戏开发团队 Parta Games 在苹果商城上架了一款名为《Choppa》(救援直升机)...
OBOK AIDEM 新作《TRAP DA GANG》是一款构思比较独特的塔防游戏,在游戏中玩家再一次...
讲真,今年的 iPhone 7 如果仍然是 16GB 起步,苹果可能要流失一些用户。
有这样的一个Smart Connector,第三方配件厂商是要好好利用。
毕竟也要数百元人民币呢,别吝啬为它添个专属配件。
对于部分怀念数码相机这种传统操控方式的人们来说,不妨体验下Pictar。
在耳机的世界里,人们通常认为传统的 L 型插头要比 I 型插口更耐用,它能承受的压力也...
要说现在的智能手机还需要点什么?那自然是更大的电池容量。
这些配件,足以让我们的 iPhone 进入一个更为神奇的拍摄世界。
天空一声巨响,酷品闪亮登场!
问各位大神一个问题
注册时间 最后登录
在线时间20 小时 UID
主题帖子人气
小苹果, 积分 32, 距离下一级还需 18 积分
关于5S解ID锁的,抹掉了是不是就不可以软解了?抹掉后,硬解的话是不是百分百可以解开,有ID锁的,放出去,能放多少钱
(273.37 KB, 下载次数: 0)
15:57 上传
(278.84 KB, 下载次数: 0)
15:58 上传
(230.37 KB, 下载次数: 0)
15:58 上传
(303.37 KB, 下载次数: 0)
15:58 上传
(310.33 KB, 下载次数: 0)
15:58 上传
(192.5 KB, 下载次数: 0)
15:58 上传
<p id="rate_10461" onmouseover="showTip(this)" tip="感谢分享^_^&人气 -2
" class="mtn mbn">
<p id="rate_542" onmouseover="showTip(this)" tip="仅代表我个人为你的人品打分。&人气 -20
" class="mtn mbn">
<p id="rate_56194" onmouseover="showTip(this)" tip="看到信息亮了&人气 -2
" class="mtn mbn">
感谢分享^_^
仅代表我个人为你的人品打分。
看到信息亮了
注册时间 最后登录
在线时间699 小时 UID
主题帖子人气
”偷手机者死全家“楼主好好好想想吧!
<p id="rate_17078" onmouseover="showTip(this)" tip="我很赞同^_^&人气 + 1
" class="mtn mbn">
我很赞同^_^
注册时间 最后登录
在线时间704 小时 UID
主题帖子人气
”偷手机者死全家“楼主好好好想想吧!
注册时间 最后登录
在线时间519 小时 UID
主题帖子人气
对蕾丝兔丶梵于 15:58:19在楼主发表的内容评分:人气:-2;
关于5S解ID锁的,抹掉了是不是就不可以软解了?抹掉后,硬解的话是不是百分百可以解开,有ID锁的,放出去,能放多少钱看到信息亮了
注册时间 最后登录
在线时间12625 小时 UID
帖子 精华8
主题帖子人气
楼主捡到ip5:
私自吞了,就这品德,还好意思来询问?
<p id="rate_10461" onmouseover="showTip(this)" tip="我就说谁能减分那么厉害20分,原来是超版&人气 + 1
" class="mtn mbn">
我就说谁能减分那么厉害20分,原来是超版
原创软件:&&汉化软件:
注册时间 最后登录
在线时间20 小时 UID
主题帖子人气
我捡来的,我又没偷没抢,我怕什么,再说我怎么联系机主啊
注册时间 最后登录
在线时间20 小时 UID
主题帖子人气
你教教我了,我该怎么做回4楼流螢飛舞于27 分钟前发表的: 楼主捡到ip5:
/read-htm-tid-9194608.ht......
注册时间 最后登录
在线时间1297 小时 UID
主题帖子人气
换主板1000多,卖掉也就值个三五百
注册时间 最后登录
在线时间142 小时 UID
主题帖子人气
魔由心生&&nb
300给我研究
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!> 一道算法题——符号平衡问题最近在算法编程过程中碰到这样一个题目给定n个整数a1,a2,an组成的序
一道算法题——符号平衡问题最近在算法编程过程中碰到这样一个题目给定n个整数a1,a2,an组成的序
SGNEWUSER & &
发布时间: & &
浏览:39 & &
回复:3 & &
悬赏:0.0希赛币
一道算法题——符号平衡问题最近在算法编程过程中碰到这样一个题目
给定n个整数a1,a2,an组成的序列。序列中元素a[i] & 的符号定义为:
当a[i]& 0时,sgn(a[i])=1;当a[i]=0时,sgn(a[i])=0;当a[i] &0时sgn(a[i])=-1;
符号平衡问题要求给定序列的最长符号平衡段的长度L,即:
L=max{j-i+1},其中1= &i &=j &=n,而且是满足sgn(a[i])+sgn(a[i+1])+...+sgn(a[j])=0这个式子的所有的i,j组合中的最大值
例如,当n=10,相应序列为:1,1,-1,-2,0,1,3,-1,2,-1 & 时,L=9。
算法设计:
给定n个整数 & a1,a2,an组成的序列,试设计一个O(n)时间算法,计算其最长符号
平衡段的长度。
数据输入:
由文件input.txt & 提供输入数据。文件的第1 & 行是正整数n,第2行是整数序列a1,a2,an &
将计算出的最长符号平衡段的长度输出到output.txt中。
输入文件示例 & 输出文件示例
input.txt &
& output.txt
1 & 1 & -1 & -2 & 0 & 1 & 3 & -1 & 2 & -1 &
这个问题如果没有要求O(n)时间的话,我觉得不难,可是如果要做到O(n)的话,该怎么做呢,请各位高手指点小弟一下,小弟不甚感激
下面的代码满足lz的要求,代码很简单,就不说明了:)
&assert.h&
#define sign(x) ((x) == 0
0 : ((x) &
int calc (int data[], int cnt)
int * value = new int[cnt + 1];
int * first = new int[cnt + 1];
int * last
= new int[cnt + 1];
for (int i = 0; i
& cnt + 1; i++)
first[i] = -1;
Initialize value, then value[i] represents the
sum of the first ith elements &#39; sign value.
value[0] = 0;
for (int i = 1; i
& cnt + 1; i++)
value[i] = value[i - 1] + sign(data[i - 1]);
For each element v in value[t], first[v]
denotes the index of v &#39;s first appearance, and
last[v] denotes the last appearance.
for (int i = 0; i
& cnt + 1; i++)
int v = value[i];
if (first[v] == -1)
first[v] = last[v] =
int max = 0;
for (int i = 0; i
& cnt + 1; i++)
if (first[i] != -1 && max
& last[i] - first[i])
max = last[i] - first[i];
int main()
int data1[] = {1, 1, -1, -2, 0, 1, 3, -1, 2, -1};
int data2[] = {1};
int data3[] = {0};
int max1 = calc (data1, sizeof(data1) / sizeof(data1[0]));
int max2 = calc (data2, sizeof(data2) / sizeof(data2[0]));
int max3 = calc (data3, sizeof(data3) / sizeof(data3[0]));
assert (max1 == 9);
assert (max2 == 0);
assert (max3 == 1);
sgq0859 & &
& & (0)(0)典型的利用空间换时间。
也可以先计算这个学列的符号和,假如是+n,从序列两头开始跳过那些正数,如果跳过了n个,则剩下的刚好是符号平衡串,如果少于n个,而两个指针指向的都是非正数,则以此为头寻找平衡串,直到正的个数超过负的,再跳过正的,直到跳过的正数等于n,记录下最大的平衡串。不知道讲清楚了没有
SgpDdimy & &
& & (0)(0)在fflush(stdin) 基础上修改bug后给出一个完善版本:
&assert.h&
&iostream.h &
#define sign(x) ((x) == 0
0 : ((x) &
1 : -1)) SgpDdimy & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&知识点梳理
1.:一根拉得很紧的线,就给我们以直线的形象,直线是直的,并且是向两方无限延伸的。一条直线可以用一个小写字母表示,如直线l;2.:直线上一点和它一旁的部分叫做射线。这个点叫做射线的端点。一条射线可以用端点和射线上另一点来表示,如射线l或射线OA;3.:直线上两个点和它们之间的部分叫做线段,这两个点叫做线段的端点。一条线段可用它的端点的两个大写字母来表示,如线段AB;4.(1)线和射线无长度,线段有长度;(2)直线无端点,射线有一个端点,线段有两个端点。
整理教师:&&
举一反三(巩固练习,成绩显著提升,去)
根据问他()知识点分析,
试题“先阅读下面材料,然后解答问题:材料一:如图(1),直线l上有...”,相似的试题还有:
我们知道过两点有且只有一条直线.阅读下面文字,分析其内在涵义,然后回答问题:如图,同一平面中,任意三点不在同一直线上的四个点A、B、C、D,过每两个点画一条直线,一共可以画出多少条直线呢?我们可以这样来分析:过A点可以画出三条通过其他三点的直线,过B点也可以画出三条通过其他三点的直线.同样,过C点、D点也分别可以画出三条通过其他三点的直线.这样,一共得到3×4=12条直线,但其中每条直线都重复过一次,如直线AB和直线BA是一条直线,因此,图中一共有\frac{3×4}{2}=6条直线.请你仿照上面分析方法,回答下面问题:(1)若平面上有五个点A、B、C、D、E,其中任何三点都不在一条直线上,过每两点画一条直线,一共可以画出_____条直线;若平面上有符合上述条件的六个点,一共可以画出_____条直线;若平面上有符合上述条件的n个点,一共可以画出_____条直线(用含n的式子表示).(2)若我校初中24个班之间进行篮球比赛,第一阶段采用单循环比赛(每两个班之间比赛一场),类比上面的分析计算第一阶段比赛的总场次是多少?
阅读下列材料并填空:(1)探究:平面上有n个点(n≥2)且任意3个点不在同一条直线上,经过每两点画一条直线,一共能画多少条直线?我们知道,两点确定一条直线.平面上有2个点时,可以画\frac{2×1}{2}=1条直线,平面内有3个点时,一共可以画\frac{3×2}{2}=3条直线,平面上有4个点时,一共可以画\frac{4×3}{2}=6条直线,平面内有5个点时,一共可以画_____条直线,…平面内有n个点时,一共可以画_____条直线.(2)迁移:某足球比赛中有n个球队(n≥2)进行单循环比赛(每两队之间必须比赛一场),一共要进行多少场比赛?有2个球队时,要进行\frac{2×1}{2}=1场比赛,有3个球队时,要进行\frac{3×2}{2}=3场比赛,有4个球队时,要进行_____场比赛,…那么有20个球队时,要进行_____场比赛.
如图,平面上有A、B、C、D4个点,根据下列语句画图.(1)画线段AC、BD交于点F;(2)连接AD,并将其反向延长;(3)取一点P,使点P既在直线AB上又在直线CD上.一道算法题,很难,求大神?
要求时间复杂度尽量低,结果给出a1到a13所有可能的组合
按投票排序
将题中三个式子按顺序分别编号为 (1),(2),(3)。(1)+(2)+(3) 得:(4) a1+a2+a3+2a4-2a5+2a6+2a7+a8+a9+a10+a11+a12+2a13=126a1 到 a13 必为 1 到 13 这 13 个数的某种排列,因此有:(5) a1+a2+...+a13=1+2+...+13=91(4)-(5)可得:(6) a4+a5+a6+a7+a13=35将(6)分别代入(1)、(2)和(3),得:(7) a1+a3-a4-a5+a12=7(8) a9+a11-a13=7(9) a2-a6-a7+a8+a10=7观查(1)、(2)、(3)、(7)、(8)、(9)可发现某些变量总是一起以加法形式出现,因此这些变量可以用一个变量代替表示。令:A=a1+a3+a12, B=a2+a8+a10, C=a4+a5, D=a6+a7, E=a9+a11, F=a13,得:(1) -& A+D+F=42(2) -& C+D+E=42(3) -& B+C+F=42(7) -& E-F=7(8) -& A-C=7(9) -& B-D=7求出上面线性方程组的基础解系(),得:(10) A=42-D-F(11) B=7+D(12) C=35-D-F(13) E=7+F显然,此方程组的可行解集即原题的可行解集。其中 A、B、(D+F) 均为原方程组 3 个变量之和,C、E 为 2 个变量之和。令原方程组中 3 个变量构成一个三元组,2 个变量构成一个二元组。那么一个可行解由 3 个三元组和 2 个二元组构成(&a1 a3 a12&,&a2 a8 a10&,&a6 a7 a13&,&a4 a5&和&a9 a11&),并满足其中任两个元组之间不存在相同的数以及各元组的和满足上面的方程组。一个元组可用 2 个字节(即 16 位)的整数表示,第 i 位为 1 表示此元组中包含 i,我们称这整数为元组的指纹。例如 37 二进制为 100101,表示元组 &1 3 6&。根据该定义可在枚举可行解前进行预处理:枚举所有满足约束的 C(13,3)=286 个三元组和 C(13,2)=78 个二元组,建立各元组的和到指纹的映射 f。注意 f 是一对多的映射,即多个不同的元组可能有相同的和,例如&4 7 9&和&3 6 11&。接下来开始枚举可行解。首先在满足 (12) 的前提下枚举可行的 F 和 D,并解方程组求出 A、B、C 和 E 的值。然后根据映射 f 枚举出所有可行的其它 4 个元组。注意, 2 个元组的指纹按位与若不为零即存在交集,不能构成可行解。最后对 A、B、C、D 和 E 这 5 个元组分别进行“各自内部的”全排列,即得到所有可行解。此外,时间复杂度是相对输入数据的规模而言,这种所有数据都固定不变的算法的时间复杂度永远是 O(1)。要是改成“运算时间尽可能少”就比较严谨了。按上述算法计算,运算时间一定远远小于将结果输出到屏幕所花的时间。楼下其它算法都是枚举 1 到 13 的所有排列,然后检查每一种排列是否满足方程组。而我的方法是先解出满足方程组的可行解集,再去枚举能够“覆盖”1 到 13 的所有排列。显然此方法的运算次数要少得多。我没说清的地方,或评论或私信,千万别带着问题离开。
自我感觉水平太菜,除了遍历试错外,没想到任何讨巧的算法。但还是要占个茅坑,证明我来过Org先用C++的全排列一个个试错,代码简单,但耗时接近1分钟。#include &cstdio&
#include &algorithm&
#include &ctime&
int main()
clock_t t1 = clock();
unsigned n = 0;
unsigned a[14] = { 0, 1,2,3,4,5,6,7,8,9,10,11,12,13 };
if( a[1]+a[3]+a[6]+a[7]+a[12]+a[13] == 42
&& a[4]+a[5]+a[6]+a[7]+a[9]+a[11] == 42
&& a[2]+a[4]+a[5]+a[8]+a[10]+a[13] == 42 )
} while( std::next_permutation(a+1,a+14) );
clock_t t2 = clock();
printf( "%u\n", n );
printf( " ---- %ld.%03ld ---\n", (t2-t1)/CLOCKS_PER_SEC, (t2-t1)%CLOCKS_PER_SEC );
// 输出 1292544, 耗时 58.203 秒
再将楼主的方程组化简一下,用最老土的for来做,以下C代码耗时接近半秒,但代码混乱#define FORLOOP(an)
for( unsigned an=1; an&=13; ++an )
if( mask & (1u&&an) ) \
unsigned temp =
unsigned mask = temp|(1u&&an);
#define ENDLOOP }
#define JUDGE( an, formula )
unsigned an =
if( an&1 || an&13 || (mask&(1u&&an)) ) \
unsigned temp =
unsigned mask = temp|(1u&&an);
#define ENDJUDGE }
#include &stdio.h&
#include &time.h&
int main()
unsigned n = 0;
clock_t t1 = clock();
unsigned mask = 0;
FORLOOP( a9 )
FORLOOP( a11 )
JUDGE( a13, a9+a11-7 )
FORLOOP( a1 )
FORLOOP( a3 )
/**************/
FORLOOP( a4 )
/* 原方程组化简为 */
FORLOOP( a5 )
/* a9+a11-a13 == 7
JUDGE( a12, 7-(a1+a3-a4-a5) )
/* a1+a3-a4-a5+a12 == 7
FORLOOP( a2 )
/* a2-a6-a7+a8+a10 == 7
FORLOOP( a6 )
FORLOOP( a7 )
/* 输出 1292544
FORLOOP( a8 )
/* 耗时 0.468秒
JUDGE( a10, 7-(a2-a6-a7+a8) )
/**********************************************/
clock_t t2 = clock();
printf( "%u\n", n );
printf( " ---- %ld.%03ld ---\n", (t2-t1)/CLOCKS_PER_SEC, (t2-t1)%CLOCKS_PER_SEC );
考虑到 “a9 a11 可互换,a1 a3 a12 可互换,a4 a5 可互换,a2 a8 a10 可互换,a6 a7 可互换” 后,代码还可以优化,优化后运行时间小于 1毫秒,用标准C函数无法计时了。#define FORLOOP(begval,an)
for( unsigned an= an&=13; ++an )
if( mask & (1u&&an) )
unsigned temp =
unsigned mask = temp|(1u&&an);
#define ENDLOOP }
#define JUDGE( e1, e2, an, formula )
unsigned an =
if( e1 & e2 )
if( an&1 || an&13 || (mask&(1u&&an)) ) \
unsigned temp =
unsigned mask = temp|(1u&&an);
#define ENDJUDGE }
#include &stdio.h&
#include &time.h&
int main()
unsigned n = 0;
clock_t t1 = clock();
unsigned mask = 0;
FORLOOP( 1, a9 )
FORLOOP( a9+1, a11 )
JUDGE( 0,0, a13, a9+a11-7 )
FORLOOP( 1, a1 )
FORLOOP( a1+1, a3 )
/**************/
FORLOOP( a3+1, a12 )
/* 原方程组化简为 */
FORLOOP( 1, a4 )
/* a9+a11-a13 == 7
JUDGE( a4,a5, a5, a1+a3+a12-a4-7 )
/* a1+a3+a12-a4-a5 == 7
FORLOOP( 1, a2 )
/* a2+a8+a10-a6-a7 == 7
FORLOOP( a2+1, a8 )
FORLOOP( a8+1, a10 )
/* 输出 1292544
FORLOOP( 1, a6 )
/* 耗时 0.000秒
JUDGE( a6,a7, a7, a2+a8+a10-a6-7 )
/**********************************************/
n += 2*6*2*6*2;
// 因为[a9 a11 可互换] [a1 a3 a12 可互换] [a4 a5 可互换] [a2 a8 a10 可互换] [a6 a7 可互换],所以加上2*6*2*6*2
clock_t t2 = clock();
printf( "%u\n", n );
printf( " ---- %.3f ---\n", (t2-t1+0.0)/CLOCKS_PER_SEC );
算法上面没有什么高见。解法如下:首先按未知量重复出现和不重复出现分成两类,并且化简式子:a9 + a11 = 7 + a13a2 + a8 + a10 = 7 + a6 + a7a1 + a3 + a12 = 7 + a4 + a5为了方便起见把下标改写成1~13:a1 + a2 = 7 + a3a4 + a5 + a6 = 7 + a7 + a8a9 + a10 + a11 = 7 + a12 + a13然后用回溯算法。import java.util.*;
public class RecursiveBackTrack {
public void solve(int printLimit){
int[] g = new int[14];
for(int i = 0; i & 14; i++){
g[i] = -1;
Set&Integer& remain = new HashSet&Integer&();
for(int i = 1; i &= 13; i++){
remain.add(i);
long start = System.currentTimeMillis();
int total = solveRec(g, 1, remain, printLimit);
long elapsed = System.currentTimeMillis() - start;
System.out.println("total solutions count: " + total * 2 * 6 * 2 * 6 * 2);
System.out.println("time elapsed: " + elapsed + " milliseconds");
private int solveRec(int[] g, int i, Set&Integer& remain, int printLimit){
if(i == 14){
if(printLimit & 0){
printSolution(g);
int tryValue;
int count = 0;
for(tryValue = 1; tryValue &= 13; tryValue++){
if(remain.contains(tryValue) && checkGoodCandiate(g, i, tryValue)){
g[i] = tryValue;
remain.remove(tryValue);
int numSolutions = solveRec(g, i + 1, remain, printLimit);
count += numSolutions;
printLimit -= numSolutions;
remain.add(tryValue);
g[i] = -1;
return count;
private boolean checkGoodCandiate(int[] g, int i, int tryValue){
if(i == 3){
return tryValue == g[1] + g[2] - 7;
} else if(i == 8){
return (tryValue == g[4] + g[5] + g[6] - 7 - g[7]) && (tryValue & g[7]);
} else if(i == 13){
return (tryValue == g[9] + g[10] + g[11] - 7 - g[12]) && (tryValue & g[12]);
} else if(i == 1 || i == 4 || i == 9 || i == 7 || i == 12){
return true;
return tryValue & g[i - 1];
private void printSolution(int[] g){
for(int i = 1; i &=13; i++){
System.out.print(g[i] + " ");
System.out.println();
public static void main(String[] args) {
int limit = Integer.MAX_VALUE;
if(args.length & 0){
limit = Integer.parseInt(args[0]);
new RecursiveBackTrack().solve(limit);
运行结果:&java RecursiveBackTrack 201 8 2 3 4 11 5 6 7 9 13 10 121 8 2 3 4 11 5 6 7 10 12 9 131 8 2 3 4 12 5 7 6 9 13 10 111 8 2 3 4 13 6 7 5 10 12 9 111 8 2 3 5 9 4 6 7 10 13 11 121 8 2 3 5 9 4 6 7 11 12 10 131 8 2 3 5 10 4 7 6 11 12 9 131 8 2 3 5 12 4 9 6 10 11 7 131 8 2 3 5 12 6 7 4 10 13 9 111 8 2 3 5 13 4 10 6 9 11 7 121 8 2 3 6 7 4 5 9 10 12 11 131 8 2 3 6 9 4 7 5 11 13 10 121 8 2 3 6 10 5 7 4 11 13 9 121 8 2 3 6 11 4 9 5 10 12 7 131 8 2 3 6 13 5 10 4 9 12 7 111 8 2 3 7 11 4 10 5 9 12 6 131 8 2 3 7 11 5 9 4 10 12 6 131 8 2 3 7 12 4 11 6 9 10 5 131 8 2 3 7 12 6 9 4 10 11 5 131 8 2 3 7 13 4 12 5 9 10 6 11total solutions count: 1292544time elapsed: 74 milliseconds
这题真不错。。。。眼睛求解得到未知数的下标就是一组答案,换成线性方程组的观点,这个下标组成的解就是方程的特解然后再求这个方程的通解。之后要是要求解是整数就挨个找一遍就好了。要求解属于R那就算了。。。。。。
太简单了。用集合差,交得分组然后排列组合既可。思路,每式6个元素,平抅值7。将1---13按(1,13)(2,12)分组.........从已知三式可推知分组,再对分组做排列组合既可。高中知识三分钟
系数矩阵的增广矩阵,求非齐次线性方程组的解,要求a13能被a1线性表出。
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 贪心算法 的文章

 

随机推荐