问题描述
小琪最近遇到了一个数学难题,给定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
小齐的数学难题,给代码(C++)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
CSDN专家-深度学习进阶 2021-08-24 10:15关注改好了,你看一下:
#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*/
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报