求大神救我,,实在找不到bug啊.......

www742224144 2012-10-03 10:28:21
闲的无聊,写了个23位水仙花........没什么算法,大体就是回朔.....在后面出现了一个让我百思不得其解的bug....实在是不明白,希望有人可以帮帮我,实在是失败,想了好几个小时呐.......
...全文
80 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
www742224144 2012-10-04
  • 打赏
  • 举报
回复
真的太感谢了....这么一个简单的bug居然找不到,昨晚真的是头昏了........
huangxy10 2012-10-04
  • 打赏
  • 举报
回复
楼主忘记把水仙花清零了,
另,程序没有注释,让人看着很费力气
最好在关键的地方写清楚。


#include<stdio.h>
#define N 4

struct dic{
int list[N];
} ;
struct dic lister[10]; //存放的是1到9的完全立方数
struct dic listerer[10]; //二位数组
int hash[10];
int flowernumbers[N]; //存放水仙花数

void flowerNumber(int n, int number);
int boolerer(int number);
void Flower();

void add(int a[],int number1) //这是一个模拟乘法
{
int i, buff;
for(i = buff = 0; i < N; i++){
a[i] = a[i] * number1 + buff;
buff = a[i] > 9 ? a[i] / 10 : 0;
a[i] %= 10;
}
}

//存1-9的N次方
void numberPower()
{
int n,i;

for(i = 1; i < 10; i++){
n = N;
lister[i].list[0] = i;
while(--n)
add(lister[i].list,i);
}
}

int main()
{
int i;
numberPower();
Flower();
scanf("%d",&i);

}

void Flower()
{
flowerNumber(N,0);
}

void flowerNumber(int n, int number) //
{
int i;
for(i = n; i >=0; i--) //i为number出现的次数
{
hash[number] = i;
listerer[number] = lister[number]; //取出立方数
add(listerer[number].list,i); //乘以个数
if( n-i > 0 && number < 9) //数字不足,且数字小于9
flowerNumber(n - i,number+1);
else
{
if(boolerer(number) == 0)
continue;
else
{
for(int k = N-1;k >= 0; k--) //输出结果
k == 0 ? printf("%d\n",flowernumbers[k]) : printf("%d",flowernumbers[k]);
}
}
}
}

int boolerer(int number)
{
int i,j;
int buf = 0;
int my[10] = {0};
for(i = 0;i < 10; i++)
my[i] = hash[i];

for(i = 0;i < N; i++) { //每次计算水仙花数都要清零
flowernumbers[i]=0;
}

for(i = 0; i < N; i++){ //N个数
for(j = 0;j < 10; j++) {
flowernumbers[i] += listerer[j].list[i]; //第i个数为10个数之和
}
flowernumbers[i] += buf;
//if(--my[(flowernumbers[i] % 10)] < 0) return 0;
buf = flowernumbers[i] / 10;
flowernumbers[i] %= 10;

//如果用上面那句注释掉的代替下面两句,结果居然不一样.......
my[flowernumbers[i]]--; //使用的数字减1
if(my[flowernumbers[i]] < 0) return 0; //发现使用的数字为负,则不成立

}
return 1;
}
www742224144 2012-10-03
  • 打赏
  • 举报
回复
名字都是随便起的......先把0-9的N次方存表.....
www742224144 2012-10-03
  • 打赏
  • 举报
回复
额....N是位数...
www742224144 2012-10-03
  • 打赏
  • 举报
回复
#include<stdio.h>
#define N 3

struct dic{
int list[N];
} ;
struct dic lister[10];
struct dic listerer[10];
int hash[10];
int flowernumbers[N];

void flowerNumber(int n, int number);
int boolerer(int number);
void Flower();

void add(int a[],int number1)
{
int i, buff;
for(i = buff = 0; i < N; i++){
a[i] = a[i] * number1 + buff;
buff = a[i] > 9 ? a[i] / 10 : 0;
a[i] %= 10;
}
}

void numberPower()
{
int n,i;

for(i = 1; i < 10; i++){
n = N;
lister[i].list[0] = i;
while(--n)
add(lister[i].list,i);
}
}

int main()
{
int i;
numberPower();
Flower();
scanf("%d",&i);

}

void Flower()
{
flowerNumber(N,0);
}

void flowerNumber(int n, int number)
{
int i;
for(i = n; i >= 0; i--)
{
hash[number] = i;
listerer[number] = lister[number];
add(listerer[number].list,i);
if(n-i > 0 && number < 9) flowerNumber(n - i,number+1);
else
{
if(boolerer(number) == 0) continue;
else
{
for(int k = N-1;k >= 0; k--)
k == 0 ? printf("%d\n",flowernumbers[k]) : printf("%d",flowernumbers[k]);
}
}
}
}

int boolerer(int number)
{
int i,j;
int buf = 0;
int my[10] = {0};
for(i = 0;i < 10; i++)
my[i] = hash[i];

for(i = 0; i < N; i++){
for(j = 0;j < 10; j++) {
flowernumbers[i] += listerer[j].list[i];
}
flowernumbers[i] += buf;
//if(--my[(flowernumbers[i] % 10)] < 0) return 0;
buf = flowernumbers[i] / 10;
flowernumbers[i] %= 10;

//如果用上面那句注释掉的代替下面两句,结果居然不一样.......
my[flowernumbers[i]]--;
if(my[flowernumbers[i]] < 0) return 0;

}
return 1;
}

33,010

社区成员

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

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