| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
高手请看看该如何修改程序(运行基本正确)使存储空间变小,因为我不会释放链表空间。#include<iostream>
using namespace std;
typedef struct LNode
{
char data;
struct LNode *next;
struct LNode *prior;
}LNode,*Linklist;
Linklist L;
int create_L(int n)
{
int i;
L=new LNode;
L->next=L;
L->prior=L;
LNode *q=L;
for(i=0;i<n;i++)
{
LNode *p=new LNode;
q->next=p;
p->prior=q;
p->next=L;
L->prior=p;
q=p;
}
q=L->next;
for(i=0;i<n/2;i++)
{
q->data='g';
q=q->next;
}
for(i=n/2;i<n;i++)
{
q->data='b';
q=q->next;
}
return 0;
}
int main()
{
int k,i,j,m;
LNode *p,*q;
int flag;
long a[4]={93313,459901,1358657,2504881};// 由于10之后的结果是太大了,只有这样
cin>>k;
while(k>0&&k<14)
{
if(k>0&&k<10)
{
flag=0;
for(i=k+1;;i=i+k+1)
{
create_L(2*k);
p=L->next;
for(m=0;m<k;)
{
for(j=0;j<i-1;j++)
{
if(p==L)
j--;
p=p->next;
}
if(p->data=='b')
{
q=p->prior;
q->next=p->next;
p->next->prior=q;
delete p;
p=q->next;
m++;
}
else
break;
}
if(m==k)
{
cout<<i<<endl;
flag=1;
break;
}
if(flag==0)
{
i++;
create_L(2*k);
p=L->next;
for(m=0;m<k;)
{
for(j=0;j<i-1;j++)
{
if(p==L)
j--;
p=p->next;
}
if(p->data=='b')
{
p->prior->next=p->next;
p->next->prior=p->prior;
p=p->next;
m++;
}
else
break;
}
if(m==k)
{
cout<<i<<endl;
flag=1;
break;
}
else
i--;
}
}
}
if(k>9)
cout<<a[k-10]<<endl;
cin>>k;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator