经常有点小迷糊 2021-08-24 09:51 采纳率: 96.7%
浏览 67
已结题

小齐的数学难题,给代码(C++)


问题描述
小琪最近遇到了一个数学难题,给定n个数,从这n个数中选出k个数进行与运算,求能得到的最小值

输入格式
两个整数n和k(1<=n<=40,1<=k<=n),接下来一行输入n个整数ai(1<=ai<=260),每个整数间用空格隔开。
输出格式
从n个数中选择k个数相与,能得到的最小值。
样例输入1
8 2
238 153 223 247 111 252 253 247
样例输出1
9
样例输入2
3 2
5 6 7
样例输出2
4
  • 写回答

3条回答 默认 最新

  • 关注

    改好了,你看一下:

    #include<bits/stdc++.h>
    using namespace std;
    int a[300],min1=0x3f77,b[300],t=65535;
    void combine(int n,int m,const int M )
    {
        for(int i=n; i>=m; i--) // 注意这里的循环范围
        {
            b[m-1] = i - 1;
            if (m > 1)
                combine(i-1,m-1,M);
            else // m == 1, 输出一个组合
            {
                for(int j=M-1; j>=0; j--){
                    if(j==M-1)
                        t=a[b[j]];
                    else
                        t=t&a[b[j]];
                }
    
                if(t<min1)
                    min1=t;
            }
        }
    }
    int main()
    {
        int i,n,k,j,t=0;
        cin>>n>>k;
        for(i=0; i<n; i++)
        {
            cin>>a[i];
        }
        combine(n,k,k);
        cout<<min1;
        return 0;
    }
    /*8 2
    238 153 223 247 111 252 253 247*/
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月24日