话不多说,直接报错
看以下代码
/***************
减治法---假币问题有n枚外观形同的硬币,里边有一枚假币,质量较轻,通过一架天平找出假币
****************************/
#include<stdio.h>
#define N 8
//const int N = 8; //有8枚硬币,此处有错
int a[N] = {2,2,1,2,2,2,2,2}; //真的重2,假的重1
int Coin(int low, int high,int n) //在a[low]~a[high]中找假币
{
int i,num1,num2,num3; //存储三组硬币个数
int add1 = 0,add2 = 0; //存储前俩组硬币质量和
if(n == 1)
return low + 1; //返回的是序号,下标加1
if(n%3 == 0)
num1 = num2 = n/3; //前面俩组有[n/3]组硬币
else
num1 = num2 = n/3 + 1;
num3 = n - num2 - num1;
for(i = 0;i <num1;i++)
add1 = add1 + a[low + i]; //计算第一组硬币重量和
for(i = num1;i <num1 + num2;i++) //计算第二组硬币重量和
add2 = add2 + a[low + i];
if(add1 < add2) //在第一组查找
return Coin(low,low + num1 - 1,num1);
else if(add1 > add2) //在第二组查找
return Coin(low + num1,low + num1 + num2 - 1,num2);
else
Coin(low + num1 + num2 ,high,num3); //在第三组查找
}
int main()
{
int i = Coin(0,7,8);
printf("第%d枚是假币\n",i);
return 0;
}
问题解决:
因为由const定义的是变量,用define定义的宏是常量。C++中可以这么用,但是C中不能这么用。
在c里静态数组(固定长度的数组,即LISTEN_NUM位置是常数)是允许的,而动态数组
(譬如给数组的长度是用变量来表示的)不能写成UserProfile users[LISTEN_NUM];形式的,只能自行分配内存。