数据结构与算法之循环算法_重工黑大帅的博客-程序员资料

技术标签: 算法  编程语言  数据结构与算法  数据结构  

数据结构与算法之循环算法

循环算法基本概念

我们借助计算机快速处理数据的功能,让计算机重复的加工计算,这就构成了循环算法,其关键在于构建循环条件和循环体。

循环条件:每个循环有其循环的开始和结束的条件,否则死循环。

循环体:每次循环执行的步骤、变量、代码形式一致,而变量内存的数据发生改变。

基本的设计方法如下两种
“自顶向下”的循环算法设计方法
自顶向下的设计方法是从全局走向局部、从策略走向详尽的设计方法。自顶向下是系统分解和细化的过程。
首先,根据题意,总体规划设计算法的主要组成或步骤。
其次,分别对各个步骤进行分解,理清各个子步骤的算法框架。
最后,继续为各个子步骤算法进行细化,直至算法实现。

由具体到抽象设计循环结构
从给定的问题的具体特点为依据进行算法设计。由具体实例进行归纳,可以比较容易地得到抽象的表达式。
首先:仔细了解问题的含义,从具体的问题中,归纳或抽象出具有普遍意义的共同特征。
其次:根据归纳得到的共同特征,设计算法,构造出“不变式”的“循环条件”和“循环体”。
最后:将问题进一步进行逐步细化, 最终得到解决问题的算法。

循环算法代码粗讲

自顶向下

问题: 由1、2、3、4、5、6个数字组成不同数字的6位数,前1位能被1整除,前2位能被2整除,…,前6位能被6整除,求这样的6位数供有多少个?

分析:总体分析得奇数位(第1、3、5位)为奇数(且5在第五位),偶数位为偶数。
对偶数的判断:
4只能在第六位:
不能在第四位:第三位数只能为1或3, 14、34都不能被4整除,即前四位不能被4整除。
不能在第二位:1+3+4=8不能被3整除,即前三位不能被3整除。
6只能在第四位:若在第二位则1+3+6=10,不能满足前三位被3整除。
2只能在第二位。
对奇数位的判断:
5只能在第五位,才能满足前五位能被5整除。
1、3无法判断。
上述通过数论方法进行的分析可以得到两个解。

#include <cstdio.h>
using namespace std;
int main()
{
    
  int a,b,c,d,e=5,f,count=0;
  for(a=1;a<5;a=a+2){
    
for(b=2;b<=6;b=b+2){
    
   for(c=1;c<5;c=c+2){
    
     if(a==c|| (a+b+c)%3!=0) continue;
     for(d=2;d<=6;d=d+2){
    
        if(b==d||(10*c+d)%4!=0) 
           continue;
       for(f=2;f<=6;f=f+2){
    
        if(b=f||d==f) continue;
        count++;
       }
    }
  }
}
   }
  return 0;
}

具体到抽象

问题: 333(2006个3)减去77*…*7(100个7),得到的个位数和十位数字是多少?
分析:
可看成am–bn的最后两位数。
分别求取am、bn 的 末尾两个数
将结果相减在加上100用100取余即可得到问题的解

#include<cstdio.h>
using namespace std;
int main(){
    
 int i,j,a=1,b=1;
 for(i=1;i<=2006;i++)
    a=a*3%100;
  for(i=1;j<=100;j++)
b=b*7%100;
printf(%d\n”,(a-b+100)%100);
return 0;
}

比赛安排

问题:
设有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。
例如n=2时的比赛安排:
队 1 2 3 4
比赛 12 34 一天
13 24 二天
14 23 三天
分析:
用二维数组is来判断两个队之间是否进行过比赛0 没有 1 有
用一维数组vis进行该轮各队是否已经安排,0未安排1安排

#include<bits/stdc++.h>
 using namespace std;
 bool is[505][505],vis[505];
 int main(){
     
    int n;scanf("%d",&n);   
	memset(is,0,sizeof(is));  //数组初始化为 0 
   	int T=(1<<n)-1;//2的n次方-1 
	int ans=0;    //第几轮 
  	 while(T--)    {
     
        memset(vis,0,sizeof(vis)); //初始化数组0   
	    printf("<%d>",++ans);   
	    bool bb=0;       //第一次打印标志 
		for(int i=1;i<=(1<<n);i++)        
		  {
                
		 	 if(!vis[i])     //若该队未安排       
		 	 {
                    
		  		vis[i]=1;                
		  		for(int j=i+1;j<=(1<<n);j++)  //寻找比赛对手             
		   			{
                        
		   		  if(!vis[j]&&!is[i][j]) //对应的队未安排,且没有进行过比赛                  
		   				 {
                           
							vis[j]=1;is[i][j]=1;//安排比赛                        
							if(bb)printf(",");                        
								printf("%d-%d",i,j);                        
							bb=1;break;                    
						}                
					}            
			}        
		}        
	printf("\n");   
	}    
	 return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wmoxie/article/details/115531983

智能推荐

< IOS > X-code 5.1 x86 - 64 编译问题_weixin_30892037的博客-程序员资料

关于xcode 5.1 x86 - 64 编译问题坐等了N久,终于IOS 7.1 发布了,作为一个果粉,忍不住第一时间升级了。结果用设备测试的时候,出问题了,一直检测不到设备,哈哈,纠结了半天,才想到原来是7.1 问题了。原来Xcode版本不得低于设备版本,IOS7.1 对应的是 Xcode 5.1,果断的升级Xcode。Xcode5.1 完成之后,打开以前的项...

GDB调试的一系列博客_weixin_34416754的博客-程序员资料

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

HLSL Intrinsic Functions_hlsl bit_警醒与鞭策的博客-程序员资料

//Cg 3.1 Toolkit Documentation 补充bitCount- return the number of bits set in a bitfield.bitfieldExtract- return an extracted range of bits from a bitfield.bitfieldInsert- returns an extrac...

C++封装互斥锁和基于RAII机制能自动解锁的互斥锁_奇妙之二进制的博客-程序员资料

#include "base/mutex.h"Mutex::Mutex() { pthread_mutex_init(&amp;mutex_, NULL); }Mutex::~Mutex() { pthread_mutex_destroy(&amp;mutex_); }void Mutex::Lock() { pthread_mutex_lock(&amp;mutex_); }void Mutex::Unlock() { pthread_mutex_unlock(&amp;mutex_);

struts2出错java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils_weixin_30364147的博客-程序员资料

http://blog.csdn.net/nero_2012/article/details/7550436转载于:https://www.cnblogs.com/yidijimao/p/5709829.html

Eclipse(STS) 导入本地 spring boot (gradle)多项目_weixin_34148456的博客-程序员资料

1、Import-General-Project from Folder or Archive2、选择需要导入的项目(这里是一个多项目,选择主项目导入就行)3、选中后finish就行了。转载于:https://www.cnblogs.com/tt9527/p/7145982.html...

随便推点

出现Field 'ssl_cipher' doesn't have a default value错误怎么解决???__我走路带风的博客-程序员资料

1、选择数据表        语句如下:use mysql;        2、在mysql的user表中增加连接用户帐号:        这里不要直接使用INSERT语句添加user记录,使用INSERT可能出现:        ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value错误。不过早期的M...

CURL断点续传(FTP/HTTP)_curl 续传_Gof_503的博客-程序员资料

include include pragma comment(lib,”libcurl_a_debug.lib”)size_t getcontentlengthfunc(void* ptr,size_t size,size_t nmemb,void *stream) { int r=0; long len=0;r=sscanf((char*)ptr,"Content_Lengt

python比较两个list之间的差异、相同(差集、交集、并集)_python比较两个list 之间元素差异_TravelingLight77的博客-程序员资料

初始化数据 listA = ['zhangsan', 'lisi', 'wangwu']listB = ['zhangsan', 'lisi', 'zhaoliu'] 1、取差集1.1、listA对应listB的差集 set(listA).difference(set(listB))-----set(['wangwu']) 1.2、listB对应listB的差集 set(listB).dif...

还不会CSS水平垂直居中?这里有12种方案_上学居中_前端向朔的博客-程序员资料

今天读书的时候,愕然发现自己居然没有总结过水平垂直居中的方法,在印象中,这个知识点确实是很神奇的存在:极其常见的需求,从理论上来看,它似乎极其简单,在实践中,它往往难如登天,当涉及尺寸不固定的元素时尤其如此。接下来我们就来总结一下该如何实现这...

请求表头headers设置Accept-Encoding为gzip,deflate,br时,python ——requets的get/post返回的结果有可能是乱码_我是个假程序员的博客-程序员资料

爬取某页面的数据时,在我本机环境进行请求,返回的结果是正常的,即不乱码,但是把代码拷贝到其他电脑运行,返回的结果就是乱码了。如下:我本机的请求结果:其他电脑运行的结果:百度了好久,都是说返回结果中文乱码的解决方案,都没有把问题解决(原来是自己问题点没有搜索对,毕竟当时自己也想不到)。后面在技术群中请教大佬后,才知道是headers请求头的Accept-Encoding设置值的问题,即Accept-Encoding='gzip,deflate,br’。因为代码都一样,在自己本机运行都正常,所以压根

SpringBoot集成SpringTask执行定时任务_spring boot dotaskbase_二十六画生的博客的博客-程序员资料

第一步:.yml文件添加配置:testTask: doTask: cron: 0 6 20 ? * * 第二步:新建配置文件spring-task.xml:&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/...

推荐文章

热门文章

相关标签