variably modified 'a' at file scope 之减治法---假币问题

来源:互联网 发布:java notify wait原理 编辑:程序博客网 时间:2024/06/05 16:57

话不多说,直接报错

看以下代码

/***************

减治法---假币问题
有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];形式的,只能自行分配内存。



1 0
原创粉丝点击