对待数组一定要MEMSET()--附带POJ1416解题报告
这两天事情太多,而且比赛临近,从昨天下午一直在搞1416,其实昨天晚上已经搞的差不多了,就差一点东西了。谁知道,今天早上补全以后,在DEV下运行,竟然出现好多莫名的错误。
找程序的逻辑, 一遍又一遍,发现错误依旧 ,偶的自信心以数量级的下降。幸亏,还懂一些二分法的思想,先把主程序逻辑看是否正确, 把一些次要的先注释掉,一点一点找,呵呵。
最后问题是,我用到的两个数组,都没有初始化,造成一些错误。
另外,还有一点必须要注意的是,如果数组越界,也很可能会导致问题错误的 ,感觉数组越界后,会循环访问现在的数组,可能这一点和编译器有关吧。
POJ 1416和 王祥骆老师曾经讲的PRINT WORDS IN LINE有点相像。因此思路并不是很难。主要是细节比较多。
快要比赛了,现在偶心里面还是没有底,不会的东西太多了!唉,偶的黑头发呀,一定要挺住,绝对不能换成白颜色呀!
POJ 1416源代码:
Source Code
Problem: 1416 | User: omycle | |
Memory: 252K | Time: 0MS | |
Language: C++ | Result: Accepted |
- Source Code
#include <iostream>
using namespace std;
int a=0;
int target=376;
int shuzu[6]/*={1,4,4,1,3,9}*/;
int Save[6];
int ForSave[6];
int Ctol/*=5*/;//判断数字数组的位数
void Init()
{
char temp_[6];
memset(temp_,0,sizeof(char)*6);
int temp=a;
int i=0;
while(temp!=0)
{
temp_[i++]=temp%10+'0';
temp=temp/10;
}
Ctol=i-1;//数字数组的位数
int max=0;
max=Ctol;
i=0;
while(max>-1)
shuzu[i++]=temp_[max--]-'0';
}
int Equal=-1;
int ok=false;
int Sum=0;
int Wei=0;//说明最终的结合中,保存到数组的第几位了,这样方便输出
void digui(int wei,int value,int save_wei/*保存数的第几位*/)
{
if(wei>Ctol)
{
if(value<=target)
{
if(!ok)
{
Sum=value;//把数值保存起来,呵呵!
for(int k=0;k<=Ctol;k++)
{
ForSave[k]=Save[k];
Wei=save_wei;
}
ok=true;
}
else if((target-Sum)>(target-value))
{
Sum=value;
for(int k=0;k<=5;k++)//这个要全部赋值滴
{
ForSave[k]=Save[k];
Wei=save_wei;
}
}
else if((target-Sum)==(target-value))
{
Equal=value;
Sum=value;
}
}
return ;
}
for(int i=wei;i<=Ctol;i++)//从现在到第几
{
int j=wei;
int temp_value=0;
for( j=wei;j<=i;j++)
{
temp_value=temp_value*10+shuzu[j];
}
//把这个temp_value的数值应该保存起来,拽拽!
Save[save_wei]=temp_value;
temp_value+=value;
digui(i+1,temp_value,save_wei+1);
Save[save_wei]=0;
}
}
int main()
{
while(1)
{
cin>>target;
cin>>a;
if(target==0&&a==0)
break;
memset(ForSave,0,sizeof(ForSave));
memset(Save,0,sizeof(Save));
if(a==target)
{
printf("%d %d\n",a,target);
continue;
}
Equal=-1;
Sum=0;
ok=false;
Init();
digui(0,0,0);
if(Equal!=Sum)
{
if(ok)
{
printf("%d ",Sum);
for(int i=0;i<Wei;i++)
{
printf("%d ",ForSave[i]);
}
}
else
{
printf("error");
}
}
else
{
printf("rejected");
}
printf("\n");
//system("pause");
}
return 0;
}
能不能尽量把project的题目也给出来 这样看代码知道是将什么的
回复删除o(∩_∩)o...
努力就行 开心就好 不要给自己太大的压力
回复删除(*^__^*) ……
呵呵 ,谢谢,题目中的source code内都有链接
回复删除