求助如何调试程序

qq_40955618 2018-06-29 04:06:57
我自己写了一个程序不知道哪里错了不知道如何调试求告知调试方法
一副1到n的牌,每次从牌堆顶取一张放桌子上,再去一张放牌堆底,直到手里没牌,最后桌子上的牌的顺序是1-n的有序,设计程序输出牌堆的顺序数组

方法是取一个1~n的数组,这里为了说明取n=5。按照题目中的规则变换,得到数组:[1 3 5 4 2],将该数组下标与值互换得到[1 5 2 4 3],即为答案。解释:[1 3 5 4 2]的意义是,经过变换,原数组中3号位置的数字现在2号槽,原数组中5号位置的数字现在3号槽... 现在已知变换后的槽存放的是1~n,故只需将下标与值互换即可得到待求数组(某大神方法)
#include<iostream>
using namespace std;
void suanfa(int *a,int *b,int m)
{
int k,temp;
for(int i = 1;i<=m;i++)
{
if(i%2==1)
{
*(b++) = *(a+i);
}
else
{
if(i == m)
{ *(b+m) = *(a+i);
break;
}

temp = *(a+i);
for( k = i+1;k<=m;k++)
{
a[k-1]=a[k];
a[m]=temp;
}
}
}
}
void suanfa2(int *b,int *a,int m)
{
for(int i = 1;i<=m;i++)
a[i] = b[b[i]];
}
void main()
{
int m ;
cin>>m;
int *a = new int[m];
int *b = new int[m];
suanfa(a,b,m);
suanfa2(b,a,m);
cout<<a;
}
就告知如何调试程序就可以了,有兴趣的可以试试
...全文
224 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_40955618 2018-07-03
  • 打赏
  • 举报
回复
引用 3 楼 qq_38319117 的回复:
你是以a为源数据,把第一个算法完成的数据放到b吧,可是你没给a里面赋值啊,你应该先用个循环什么的赋值啊,然后再加断点,看看每一步执行完你的数组变成啥了,和你设计的逻辑符不符合,我自己写了你的第一个算法,是2张牌2张牌过,感觉逻辑比你这个要清楚一点 int length = 10, i; int *in = new int[length]; int *out = new int[length]; for (i = 0; i < length; i++) { in[i] = i+1; } int count = 0, second = 0; while (count < length) { out[count] = in[0]; second = in[1]; memcpy(in, in + 2, (length - 2) * 4); in[length - 2 - count] = second; in[length - 1 - count] = 0; count++; }
真的是太厉害了!谢谢通过您的回答我仔细调试了我的程序确实发现我的第一个算法的逻辑错误并且b数组还溢出了即使改正了我的算法但是比起您的算法来说我的这个的时间复杂度太大了!通过您和楼上的回答我调试发现了一点门道谢谢!
_肆 2018-07-03
  • 打赏
  • 举报
回复
你是以a为源数据,把第一个算法完成的数据放到b吧,可是你没给a里面赋值啊,你应该先用个循环什么的赋值啊,然后再加断点,看看每一步执行完你的数组变成啥了,和你设计的逻辑符不符合,我自己写了你的第一个算法,是2张牌2张牌过,感觉逻辑比你这个要清楚一点
int length = 10, i;
int *in = new int[length];
int *out = new int[length];

for (i = 0; i < length; i++)
{
in[i] = i+1;
}

int count = 0, second = 0;

while (count < length)
{
out[count] = in[0];
second = in[1];
memcpy(in, in + 2, (length - 2) * 4);
in[length - 2 - count] = second;
in[length - 1 - count] = 0;
count++;
}
  • 打赏
  • 举报
回复
IDE都是自带有调试工具的,当然,printf也不失为一种方法(前提,你能有大概的猜测,是哪里错了,然后通过printf进行验证),命令行的话CDB就不错。
赵4老师 2018-06-29
  • 打赏
  • 举报
回复
在适当的地方加
printf输出相关变量或数组的值
getchar();
辅助调试。

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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