替换goto

来源:百度知道 编辑:UC知道 时间:2024/05/05 17:39:38
#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
using namespace std;

#define size 2000
int board[size];//记录棋盘状况的数组

//记录冲突的数组
int ru[size*2];//右上
int rd[size*2];//右下

int recran[size];
int n; int rec[size];

int f()
{//计算冲突的函数
int i,r=0;
memset(ru,0,sizeof(ru));
memset(rd,0,sizeof(rd));
for(i=0;i<n;i++)
{
ru[board[i]-i+n]++;
rd[board[i]+i]++;
}
for(i=0;i<2*n;i++)
{
if(ru[i]>1) r+=ru[i]-1;
if(rd[i]>1) r+=rd[i]-1;
}
return r;
}

//生成x个不重复的随机数,放入board数组
void randgen(int x)
{
int i,temp;
memset(recran,0,sizeof(int)*(n+1));
for(i=0;i<n;i++)
{
do
{
temp=rand()%x;
}
while(recran[temp]==1);
board[i]=temp;
recran[temp]=1;
}
}

int main() <

使用两个标志位,用do/while循环再加上break语句的使用就可以了,
下面的代码已经改好了,具体的看注释吧:
#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
using namespace std;

#define size 2000
int board[size];//记录棋盘状况的数组

//记录冲突的数组
int ru[size*2];//右上
int rd[size*2];//右下

int recran[size];
int n; int rec[size];

int f()
{//计算冲突的函数
int i,r=0;
memset(ru,0,sizeof(ru));
memset(rd,0,sizeof(rd));
for(i=0;i<n;i++)
{
ru[board[i]-i+n]++;
rd[board[i]+i]++;
}
for(i=0;i<2*n;i++)
{
if(ru[i]>1) r+=ru[i]-1;
if(rd[i]>1) r+=rd[i]-1;
}
return r;
}

//生成x个不重复的随机数,放入board数组
void randgen(int x)
{
int i,temp;
memset(recran,0,sizeof(int)*(n+1));
for(i=0;i<n;i++)
{
do
{
temp=rand()%x;
}
whi