118.求满足特异条件的数列

简介: 118.求满足特异条件的数列
#include<stdio.h>
#define NUM 10      /*允许分解的最大元素数量*/
int i[NUM];        /*记录分解出的数值的数组*/
void main()
{
   int sum,n,total,k,flag,count=0;
   clrscr();
   puts("*********************************************************");
   puts("*   This is a program to get number sequence with       *");
   puts("* special characteristic. Input n and m,get the sequence*");
   puts("* S1,S2,...,Sn, where S1+S2+...+Sn=m and S1>=S2>=...>=Sn*");
   puts("* e.g.n=4,m=8,S: 5 1 1 1,4 2 1 1,3 3 1 1,3 2 2 1,2 2 2 2*");
   puts("*********************************************************");
   printf(" >> Input element number of the sequence (n<=10): ");
   scanf("%d",&n);
   printf(" >> Input the sum of the elements (m<=20): ");
   scanf("%d",&total);
   sum=0;                 /*当前从后向前k个元素的和*/
   k=n;                   /*从后向前正在处理的元素下标*/
   i[n]=1;             /*将最后一个元素的值置为1作为初始值*/
   printf(" >> Possible sequences are as follows:\n");
   while(1)
   {
      if(sum+i[k]<total)     /*若后k位的和小于指定的total*/
         if(k<=1)            /*若正要处理的是第一个元素*/
         {i[1]=total-sum;flag=1;}     /*则计算第一个元素的并置标记*/
         else{
            sum+=i[k--];
            i[k]=i[k+1];        /*置第k位的值后k-1*/
            continue;         /*继续向前处理其它元素*/
         }
      else if(sum+i[k]>total||k!=1)   /*若和已超过total或不是第一个元素*/
         { sum-=i[++k]; flag=0;}      /*k向后回退一个元素*/
      else flag=1;        /*sum+i[k]=total&&k=1 则设置flag标记*/
      if(flag)
      {
         printf(" No.%2d: ",++count);
         for(flag=1;flag<=n;++flag)
            printf("%d ",i[flag]);
         printf("\n");
      }
      if(++k>n)     /*k向后回退一个元素后判断是否已退出最后一个元素*/
         break;
      sum-=i[k];
      i[k]++;        /*试验下一个分解*/
   }
   printf("\n Press any key to quit...");
   getch();
}
相关文章
|
SQL API 索引
Superset对接ElasticSearch服务展示
Superset对接ElasticSearch服务展示
957 2
|
存储 SQL Web App开发
SQL实践篇(一):使用WebSQL在H5中存储一个本地数据库
SQL实践篇(一):使用WebSQL在H5中存储一个本地数据库
400 2
|
JavaScript 前端开发
Vue实现模糊查询
Vue实现模糊查询
409 1
|
Java 数据库连接 Spring
如何在IDEA中自定义模板、快速生成完整的代码?
这篇文章介绍了如何在IntelliJ IDEA中使用easycode插件自定义代码生成模板,以快速生成Spring Boot、MyBatis等项目中常见的Controller、Service、Dao、Mapper等组件的代码。
如何在IDEA中自定义模板、快速生成完整的代码?
|
机器学习/深度学习 数据采集 自然语言处理
【NLP-新闻文本分类】处理新闻文本分类所有开源解决方案汇总
汇总了多个用于新闻文本分类的开源解决方案,包括TextCNN、Bert、LSTM、CNN、Transformer以及多模型融合方法。
655 1
|
数据采集 JSON JavaScript
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
本文介绍了如何使用PHP模拟表单提交并结合代理IP技术抓取京东商品的实时名称和价格,特别是在电商大促期间的数据采集需求。通过cURL发送POST请求,设置User-Agent和Cookie,使用代理IP绕过限制,解析返回数据,展示了完整代码示例。
286 3
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
|
编解码 算法 计算机视觉
YOLO特征融合的原理是怎样的?
YOLO特征融合的原理是怎样的?
|
消息中间件 人工智能 弹性计算
《文档智能 & RAG让AI大模型更懂业务》解决方案评测
一文带你了解《文档智能 & RAG让AI大模型更懂业务》解决方案的优与劣
401 13
|
机器学习/深度学习 存储 传感器
足球黑科技之AI与足球智能分析
最近的足球盛宴引发了球迷的狂欢,阿根廷对沙特的越位,日本对西班牙的出界球,葡萄牙对乌拉圭C罗是否碰到了球等热点事件是否引发了你的关注呢。其实在这些热点背后,离不开足球智能裁判的辅助,足球作为全世界最受欢迎的运动,也一直致力于和高科技的结合。此篇文章,给大家带来了足球视频智能分析,让我们一起看看AI是如何在足球运动中大放光彩的的吧!
1891 3
足球黑科技之AI与足球智能分析
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。