题解:

错误的:

#include<stdio.h>
int n,ret=0,a[10000][10];
int p(int c,int s){
 int i;
 for(i=1;i<=3;i++){
   s+=i;
   if(c==9){
     if(s==n){
       a[ret][c]=i;
       ret++;
       return 1;
     }else{
      s-=i;
       continue;
     }
   }else{
     if(p(c+1,s)){
      a[ret-1][c]=i;
      return 1;
    }
  }
 
 }
}
int main()
{
 int i,j;
 scanf("%d",&n);
 if(n>30&&n<10){
  printf("0");
 }else{
  int b=p(0,0);
 
 }
 printf("%d\n",ret);
 for(i=0;i<ret;i++){
  for(j=0;j<10;j++){
   printf("%d ",a[i][j]);
  }
  printf("\n");
 }
 return 0;
}
 
可惜的是这个递归出来只有一个解,之后将返回值去掉,进入函数时存放数据,满足一次就拷贝数据至下一行数组中,继续循环。这样弄有点繁琐。
简单点的话,其实可以用一个一维数组来测试组合,符合时就将这组数拷贝到二维数组中。
int c[10000][10],b[10];
void p(int total,int a){
 int i,j;
    if (a==10){
        if (total==n) {
            for ( j=0;j<10;j++) c[ret][j]=b[j];//符合要求存起来~~
            ret++;
        }
    }
    else if (total>=n) ;//小小优化一下
    else
      for ( i=1;i<=3;i++){
          b[a]=i;
          p(total+i,a+1);//其实这和十连for没什么区别。。。
      }
}
 
网上说正解是搜索,歪解是枚举,枚举两遍即可完成,说实话咱也想过要枚举,一是觉得有点简单,二是觉得可能会算法复杂度太高,结果是不高。。。

最新文章

  1. 使input文本框随其中内容而变化长度的方法
  2. 在apache中设置访问目录后进入的默认页面为index.php
  3. LeetCode Count of Smaller Numbers After Self
  4. nginx添加镜像缓存 proxy_store(未完待续)
  5. JavaScript构建(编绎)系统大比拼:Grunt vs. Gulp vs. NPM
  6. setjmp和longjmp的使用
  7. 浏览器插件-ActiveX
  8. opencv中的图像区域复制
  9. angular $location常用方法使用
  10. 《我是一只IT小小鸟》 读后感
  11. Delphi VMT的前世今生(研究一下D7的VMT表结构)
  12. Sass与Compress实战:第八章
  13. python学习(七)
  14. 我的日志分析之道:简单的Web日志分析脚本
  15. Alice and Bob(博弈)
  16. 一,Android Studio笔记
  17. 二叉树的前序、中序、后序遍历 python
  18. 爬虫入门【10】Pyspider框架简介及安装说明
  19. SPOJ - BALNUM 数位dp
  20. Day3-Python基础3--函数参数及调用

热门文章

  1. &lt;深入理解redis&gt;读书笔记
  2. Golang的环境安装
  3. Windows和Ubuntu双系统时钟同步的方法。
  4. JS - 对话框
  5. iptable实现端口转发
  6. 十三、JavaScript之跨多行的变量申明
  7. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:SSH框架(Struts2+Spring+Hibernate)搭建整合详细步骤
  8. axios实现类似form传值的格式,以及实现拦截器功能,response拦截实现权限判断
  9. 【Vue中的坑】路由相同参数不同无法触发路由
  10. windows内核安全编程书籍