首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

ACM入门题 求最大最小者-帮看看逻辑下哪里出错

2012-09-18 
ACM入门题 求最大最小者------帮看看逻辑上哪里出错!/*************************************************

ACM入门题 求最大最小者------帮看看逻辑上哪里出错!
/************************************************************************/
/* 题目: 由1~9这九个数字组成的无重复数字的九位数,能被11整除,求最大最小者。  
/************************************************************************/
#include <iostream>
using namespace std;

bool nonRepeat(int digit[], int size);

int main()
{
int i;
int digit[10];
int m;
  long min = 123456789;
long max = 987654321;
long temp;
bool bFound = false;

//找最小者
i = 0;
while (!bFound)
{
if (min % 11 == 0)
{
temp = min;
while (temp)
{
m = temp % 10;
digit[i++] = m;
temp /= 10;
}
if (nonRepeat(digit, 10))
{
bFound = true;
continue;
}
}
min ++;
}

//找最大者
bFound = false;
i = 0;
while (!bFound)
{
if (max % 11 == 0)
{
temp = max;
while (temp)
{
m = temp % 10;
digit[i++] = m;
temp /= 10;
}
if (nonRepeat(digit, 10))
{
bFound = true;
continue;
}
}
max --;
}
cout << "max = " << max << endl;
cout << "min = " << min << endl;

system("pause");
return 0;
}


/////////////////////////////////////////////////////
//判断是否有重复数字
bool nonRepeat(int digit[], int size)
{
int i = 0;
  int j = 0;

for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
if (i == j)
continue;
if (digit[i] == digit[j])
{
return false;
}
}
}
return true;
}

[解决办法]
if (min % 11 == 0)
{
temp = min;
i = 0;
while (temp)
{
m = temp % 10;
digit[i++] = m;
temp /= 10;
}
找max也是一样的要设置i=0

因为下一个min%11==0对应的是min+11所以可以修改一下。
而且可以先生成不重复的九位数,然后再判断是否能被11整除,这样会快些
[解决办法]
最小值出现0,因为没有判断呀
在判断重复函数加上就可以

#include <iostream>
using namespace std;

bool nonRepeat(int digit[], int size);

int main()
{
 int i;
 int digit[10];
 int m;
 long min = 123456789;
 long max = 987654321;
 long temp;
 bool bFound = false;
 
 //找最小者
 while (!bFound)
 {
if (min % 11 == 0)
{
temp = min;
i = 0;
while (temp)
{
m = temp % 10;
digit[i++] = m;
temp /= 10;
}
if (nonRepeat(digit, 10))
{
bFound = true;
continue;
}
}
min ++;
 }
 
 //找最大者
 bFound = false;
 while (!bFound)
 {
if (max % 11 == 0)
{
temp = max;
i = 0;
while (temp)
{
m = temp % 10;
digit[i++] = m;
temp /= 10;
}
if (nonRepeat(digit, 10))
{
bFound = true;
continue;
}
}
max --;
 }
 cout << "max = " << max << endl;
 cout << "min = " << min << endl;
 
 system("pause");
 return 0;
}


/////////////////////////////////////////////////////
//判断是否有重复数字
bool nonRepeat(int digit[], int size)
{
int i = 0;
int j = 0;

for (i = 0; i < size; i++)
{
if (!digit[i])
{


return false;
}

for (j = i+1; j < size; j++)
{
if (digit[i] == digit[j])
{
return false;
}
}
}
return true;
}

热点排行
Bad Request.