民意调查问题的Java实现:为了解人们获取新闻的来源,调查小组对N个人进行了民意调查,其结果如下:50人使用电视作为新闻来源,其中包括只看电视的和结合其他新闻来源的人;61人不使用收音机作为新闻来源;

题目

为了解人们获取新闻的来源,调查小组对N 个人进行了民意调查,其结果如下:

        50 人使用电视作为新闻来源,其中包括只看电视的和结合其他新闻来源的人;

        61 人不使用收音机作为新闻来源;

        13 人不使用报纸作为新闻来源;

        74 人至少使用至少两种方式来获取新闻。

N 的最大值和最小值。

算法描述

        不妨设总共对N 个人进行民意调查,其中以上三种方式都不适用的人数设为x ,则可以用以下表示:

电视收音机报纸三者都不
50N-61N-13x

      由于有74 人使用至少两种方式来获取新闻,则四项相加至少重复计算了74 人(即如果有使用三种方式的人,重复计算的人数大于74 )则如上四项相加减去最小的重复计算人数74 应大于等于总数N ,即:

50+N-61+N-13+x-74≥N

        由于三种方式都不适用的与通过报纸获取新闻的人数之间没有重复的,所以相加应小于等于总数N ,即:

x+N-13≤N

同理有:

x+N-61≤N

x+50≤N

        当N 不断减小时,考虑到有74 人使用至少两种方式获取新闻,则电视、收音机、报纸总和至少要满足能够凑出74 人使用两种方式获取新闻,即:

50+N-61+N-132×74

        当N 不断增大时,考虑到四种方式的总人数会远大于N 。导致即使减去重复人数也会大于N ,造成条件的不满足。而重复人数最大的情况是,使用三种方式的有50 人,使用两种方式的有74-50 人。所以,这里的限制条件应为所有种类人数总和减去最大重复计算的人数应当小于等于总数N ,即:

50+N-61+N-13+x-2×50+74-50≤N

整理如上公式得:

N+x98

x13

x61

xN-50

N86

N+x148

由于x61x13 的必要条件,所以可以将x61 舍去;当 N86x13 时,可得出x13<36N-50 ,即 xN-50 必然成立,所以可以将xN-50 舍去。

再次整理得:

N+x98

x13

N86

N+x148

所以只需对Nx 编程,进行如上条件判定,通过循环的方式,找出N 的最大值和最小值。显然86N1480x13 ,所以只需对N 在[86, 148 ],对x 在[0,13] 进行遍历。 

代码实现 

public class Problem1 {
    private static boolean isProper(int N) {
        for (int x = 0; x <= 13; x++) {//x在[0,13]进行遍历
            if (N + x >= 98 && N >= 86 && N + x <= 148) {
                return true;
            }
        }//对x进行遍历,若期间找到x,使N满足不等式,返回true
        return false;//若没找到,返回false
    }//对N的值是否可行进行判定,即能否找到有效的x使不等式全部成立

    public static void main(String[] args) {
        int Nmin = 0, Nmax = 0;
        for (int N = 86; N <= 148; N++) {//N在[0,148]进行遍历
            if (isProper(N)) {//当N可行时
                Nmax = N;//每次发现N可行时,便将最大值更新;
                if (Nmin == 0) {//若Nmin仍是初始值
                    Nmin = N;//即N首次找到符合条件的值,该值为最小
                }
            }
        }
        System.out.println("Nmax=" + Nmax);
        System.out.println("Nmin=" + Nmin);
    }
}

运行结果 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值