当输入:3 1 ,找3行1列数组的鞍点时
4 2 1
输出为:None 是为什么?
(当输入:3 1 时,输出是正确的)
1 2 4
供参考:
内外循环不要使用同一个循环变量i
{}, {0}, {1}, {0,1}, {2}, {0,2}, {2,1}, {0,1,2}
while(n)
{ result=0;
k=1;
i=n%2;
result=k*i+result;
k=k*10;
n/=2;
}
例如:{a,b,c} 的子集中的{a,b}子集,就可以用二进制110)(进制数为6).
子集 | 序号i | 对应的二进制数 |
---|---|---|
{} | 0 | 000 |
{0} | 1 | 001 |
{1} | 2 | 010 |
{0,1} | 3 | 011 |
{2} | 4 | 100 |
{0,2} | 5 | 101 |
{1,2} | 6 | 110 |
{0,1,2} | 7 | 111 |
#include <stdio.h>
void main()
{
int n,m,i,j,k;
printf("n:");
scanf("%d",&n);
m=1;
for(i=1;i<=n;i++)
m=m*2; // 计算m,使得m=2^n,子集个数,作为大循环界限
m--; // m=2^n-1;
for(i=0;i<=m;i++)
{
k=0; //k为对应的数字,从0开始,最大为2^n-1
j=i;
printf("{");
while(j!=0)
{
if(j%2==) printf("%d",k); //利用辗转相除法从低位到高位转换成二进制数
k++;
j/=2;
}
printf("}");
}
printf("\n");
}