【算法请教】一数组B,B中每个元素分别是数组A中对应位置的元素在B中出现的次数

artwl_cn 2011-02-21 10:49:35
一数组B,B中每个元素分别是数组A中对应位置的元素在B中出现的次数

如:
有一数组A[10], A[0]~A[9]分别是整数0~9。
现需一方法,解出数组B[10],B[i]为A[i]在数组B中出现的次数。
其中一种情况是
A: 0 1 2 3 4 5 6 7 8 9
B: 6 2 1 0 0 0 1 0 0 0

求一算法算出所有结果
...全文
226 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
牛海朋 2011-03-02
  • 打赏
  • 举报
回复
我答对了,怎么不给分。。。。。。。。
artwl_cn 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dingwo006 的回复:]

NO OK: all num:10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
NO OK: all num: 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
NO OK: all num: 7, 1, 0, 0, 0, 0, 0, 0, 0, 1,
NO OK: all num: 7, 2, 0, 0, 0, 0, 0, 1, 0, 0,
NO OK: all ……
[/Quote]
这个结果明显有问题啦
一曲肝肠断 2011-02-23
  • 打赏
  • 举报
回复
NO OK: all num:10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
NO OK: all num: 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
NO OK: all num: 7, 1, 0, 0, 0, 0, 0, 0, 0, 1,
NO OK: all num: 7, 2, 0, 0, 0, 0, 0, 1, 0, 0,
NO OK: all num: 6, 2, 1, 0, 0, 0, 0, 1, 0, 0,
OK: all num: 6, 2, 1, 0, 0, 0, 1, 0, 0, 0,

好像没用几步,过程上面所示(环境gcc + netbeans)。
再次向3楼道歉,请见谅!
一曲肝肠断 2011-02-23
  • 打赏
  • 举报
回复
利用3楼的思路,验证一下,可以满足
3楼不好意思,我开始以为这样不行的,误会你了
#include <stdio.h>
#include <stdlib.h>

#define arraylength sizeof(a)/sizeof(int)

int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int b[arraylength] = {0};

int getcount(int);
int setarray();
int isok();
int getcount(int i)
{
int j = 0, ir = 0;
for(j = 0; j < arraylength; j++)
{
if(b[j] == i)
ir++;
}
return ir;
}
int setarray()
{
int i = 0;
for(i = arraylength -1; i >= 0; i--)
b[i] = getcount(a[i]);
}
int isok()
{
int i;
for(i = 0; i < arraylength; i++)
{
if(b[i] != getcount(a[i]))
return 0;
}
return 1;
}
void main()
{
int i, j;
while(1)
{
setarray();
if(isok())
{
printf("OK: then num is:");
for(i = 0 ; i < arraylength; i++)
printf("%d, ", b[i]);
printf("\n");
break;
}
}
return;
}
一曲肝肠断 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 durongjian 的回复:]

顶起,大家讨论一下,提供一些思路就OK啊
[/Quote]
恩,等高手出现,顶,顶,还顶!
我用了个搜索算法,碰到问题,不知道如何处理。

思路是:
1.先计算第一个位置,
2.递归计算后面的位置,判读是否会引起前面的值得变化,作为递归终止条件。

但是这样会出现个问题,到计算A[1]的时候,比如结果是1,且B[1] != 1,按照条件要在B[1]写入1,但是写入后,1的数目就为2了,莫非还要设置忽略处?
哎,等高手帮解决啊,
kon3155 2011-02-23
  • 打赏
  • 举报
回复
0, 1, 2, 3, ..., x-1, x, x+1, ..., n
x, 2, 1, 0, ..., 0, 1, 0, ..., 0

http://www.javaeye.com/topic/226364?page=7#629927

附赠一句有意思的话:
"This autogram contains five a's, one b, two c's, two d's, thirty-one e's, five f's, five g's, eight h's, twelve i's, one j, one k, two l's, two m's, eighteen n's, sixteen o's, one p, one q, six r's, twenty-seven s's, twenty-one t's, three u's, seven v's, eight w's, three x's, four y's, and one z."
牛海朋 2011-02-23
  • 打赏
  • 举报
回复
根据你说的可以得出以下结论
条件:(1)A[0]=0,A[1]=1,....A[9]=9A中所有数字的个数即为B中所有数字之和,即
(2)B[0]+B[1]+...+B[9]=10
B中所有数字之和也可以表示为各数字乘以出现次数,即
A[0]B[0]+A[1]B[1]+...+A[9]B[9]=B[0]+B[1]+...+B[9]=10,简化为
(3)B[1]+2B[2]+...+9B[9]=10此外还有一个隐含条件,就是0=<B[i]<=10,但由于若有一B[i]=10,则B[0]=B[1]=...B[9]=1,显然不符合条件,故有
(4)0=<B[i]<=9,i=0,1,2,...9下面开始求解:
由(2)式和(3)式相减,得到
(5)B[2]+2B[3]+...+8B[9]=B[0]
暂且假设B[0]取得最大值9,则由8B[9]<=9(放缩法)知B[9]只能为0或1,同样的,我们可以得到各数的可能取值如下,
(6)b[1]=0,1,2,3,4,5,,6,7,8,9
b[2]=0,1,2,3,4
b[3]=0,1,2,3
b[4]=0,1,2
b[5]=0,1
b[6]=0,1
b[7]=0,1
b[8]=0,1
b[9]=0,1
我们根据(5)(6)两式从B[9]开始分析
1.若B[9]=1,则由(3)式得B[1]=1,其皆为0,代入(2)式验证不符合条件,故B[9]=0;
2.将B[9]=0代入5得B[2]+2B[3]+...+7B[8]=10,类似上面方法,若B[8]=1,则B[2]=B[3]=1(其余为0)或者B[4]=1(其余为0),同样代入(2)式验证不符合条件,故B[8]=0;
类似地,逐渐用所求的结果化简上面式子,便得结果。
思路就是这样的,大家可以用程序实现。
artwl_cn 2011-02-22
  • 打赏
  • 举报
回复
顶起,大家讨论一下,提供一些思路就OK啊
artwl_cn 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhaolinger2 的回复:]

此问题若干时间前还讨论过,呵呵。
[/Quote]
能给个链接吗?
zhaolinger2 2011-02-21
  • 打赏
  • 举报
回复
此问题若干时间前还讨论过,呵呵。
一曲肝肠断 2011-02-21
  • 打赏
  • 举报
回复
恩,等高手出现,我陪你等,呵呵
我验证了,好像就这一个结果,最笨的方法,所有值都验证了,
只有这一个结果,
artwl_cn 2011-02-21
  • 打赏
  • 举报
回复
等待高手的出现
一曲肝肠断 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 nut799 的回复:]

想了个思路,从a[i]中从大数往小数找,9 出现的次数,8出现的次数 。这样遍历。
就可以了,效率是O(n^2),不太高
分数不够了,来混分数。。。
[/Quote]
你的思路好像不太可以吧,后面的结果会影响前面的,
我是算不来,呵呵,
好像结果不止一种吧
一曲肝肠断 2011-02-21
  • 打赏
  • 举报
回复
不太好算,呵呵,试试在说
nut799 2011-02-21
  • 打赏
  • 举报
回复
想了个思路,从a[i]中从大数往小数找,9 出现的次数,8出现的次数 。这样遍历。
就可以了,效率是O(n^2),不太高
分数不够了,来混分数。。。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧