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

话不多说,直接报错

看以下代码

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

减治法---假币问题
有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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值