zoukankan      html  css  js  c++  java
  • 洛谷 p1157 组合的输出

    没有dalao找规律啊,
    这规律应该很明显吧

    好吧,是因为我太弱了,连枚举搜索都不会打

    观察一下样例

    1 2 3

    1 2 4

    1 2 5

    1 3 4

    1 3 5

    1 4 5

    2 3 4

    2 3 5

    2 4 5

    3 4 5

    每一次都是最后一位+1,然后倒数第k列不能超过n - k

    如果超过了,那么k - 1列+ 1,k列 = k - 1列 + 1,(这个过程我们叫做进位吧),在进位过程中如果进多位

    则从k - (进的位数) 开始有a[i] = a[i - 1] + 1,如果第0列进位,那么所有情况已经写完

    交代码

    #include<bits/stdc++.h>
    using namespace std;
    int a[1001];
    int main(int argc, char const *argv[])
    {
    	int n,m;
    	cin>>n>>m;
    	for (int i = 0; i <= n; ++i)//第一行永远是a[i] = i,a[0] 的话可以设也可以不设
    	{
    		a[i] = i;
    		/* code */
    	}
    	while(a[0] == 0){//a[0] 如果进位了就结束
    		for (int i = 1; i <= m; ++i)//打印
    		{
    			cout<<setw(3)<<a[i];//别忘了域宽,我被坑了2次
    			/* code */
    		}
    		cout<<endl;
    		a[m] ++;//开始进位
    		if (a[m] > n)//这个if不要也行
    		{
    			int k = m;//k统计进到几位
    			while(a[k] > n - (m - k)){//进位
    				a[k - 1] ++;
    				if (k - 1 == 0)//改变a[0]直接退出
    				{
    					return 0;
    					/* code */
    				}
    				k --;
    			}
    			k ++;//每次都多-了一次,加上
    			for (int i = k; i <= m; ++i)//进位
    			{
    				a[i] = a[i - 1] + 1;
    				/* code */
    			}
    			/* code */
    		}
    	}
    	return 0;
    }
    

    可怜一下连搜索都不会的蒟蒻吧

  • 相关阅读:
    二项式反演
    快速沃尔什变换
    springMVC的form标签
    springMVC的拦截器配置
    RESTful使用方法
    springMVC数据绑定
    使用spring框架自带的字符拦截器
    将idea中的项目上传至github
    springMVC的使用方式
    springMVC的概述
  • 原文地址:https://www.cnblogs.com/lztzs/p/10901032.html
Copyright © 2011-2022 走看看