Matlab编程 Project Euler Problem24 : Lexicographic permutations
来源:互联网 发布:算法和程序的关系 编辑:程序博客网 时间:2024/06/08 02:08
%Lexicographic_permutations_24.M
%找出0~9排序 从小到大排序中的第1000000个数据
%思路:排列第一个数有A(9,9)种方法,拍第二个数有A(8,8)种方法,以此类推,只要不大于1000000,就可以减去这些值
clear all;
close all;
set=0 : 9 ; %集合0~9
result_vec=zeros(1,10); %已经拍好的数
temp=zeros(1,10);
rest_num=1000000; %还剩多少个数字
arrange_val=1; %剩余数字的组合数
N=10-1;
for k=1:10-1 %排出前面9个数,第十个也就出来了
%计算A(N,N)
for i=1 : N
arrange_val=arrange_val * i ;
end
N=N-1;
num=int8(floor(rest_num/arrange_val)); %将double转化为int8,作为矩阵的下标
%对于能整除arrange_val的rest_num,其对应的num正好是set(num)所有排列中的最后一个,由于下面语句中使用num+1作为下标,就会出现错误,于是减一
if(rem(rest_num,arrange_val)==0)
num=num-1;
end
result_vec(k)=set(num+1); %由于set(num)=num+1 所以加一
rest_num=rest_num-double(num)*arrange_val; %更新剩余数据
%将set(num+1)后的数据前移一位,set(num+1)放在set数组的最后一位,这样只需要看前面未选的数字即可
temp(1)=set(num+1);
for j=num+1 : 10-1
set(j)=set(j+1);
end
set(10)=temp(1);
%更新arrange_val的值
arrange_val=1;
end
result_vec(10)=set(1); %将最后一个未选的数字放在结果数组result_vec的最后一位
disp(result_vec) %显示输出
%找出0~9排序 从小到大排序中的第1000000个数据
%思路:排列第一个数有A(9,9)种方法,拍第二个数有A(8,8)种方法,以此类推,只要不大于1000000,就可以减去这些值
clear all;
close all;
set=0 : 9 ; %集合0~9
result_vec=zeros(1,10); %已经拍好的数
temp=zeros(1,10);
rest_num=1000000; %还剩多少个数字
arrange_val=1; %剩余数字的组合数
N=10-1;
for k=1:10-1 %排出前面9个数,第十个也就出来了
%计算A(N,N)
for i=1 : N
arrange_val=arrange_val * i ;
end
N=N-1;
num=int8(floor(rest_num/arrange_val)); %将double转化为int8,作为矩阵的下标
%对于能整除arrange_val的rest_num,其对应的num正好是set(num)所有排列中的最后一个,由于下面语句中使用num+1作为下标,就会出现错误,于是减一
if(rem(rest_num,arrange_val)==0)
num=num-1;
end
result_vec(k)=set(num+1); %由于set(num)=num+1 所以加一
rest_num=rest_num-double(num)*arrange_val; %更新剩余数据
%将set(num+1)后的数据前移一位,set(num+1)放在set数组的最后一位,这样只需要看前面未选的数字即可
temp(1)=set(num+1);
for j=num+1 : 10-1
set(j)=set(j+1);
end
set(10)=temp(1);
%更新arrange_val的值
arrange_val=1;
end
result_vec(10)=set(1); %将最后一个未选的数字放在结果数组result_vec的最后一位
disp(result_vec) %显示输出
阅读全文
0 0
- Matlab编程 Project Euler Problem24 : Lexicographic permutations
- 24 Lexicographic permutations - Project Euler +
- project euler 24 Lexicographic permutations
- Project Euler:Problem 24 Lexicographic permutations
- Lexicographic permutations
- Matlab 编程 Project Euler Problem 20 Factorial digit sum
- Matlab 编程 Project Euler Problem 21 Amicable numbers
- Matlab 编程 Project Euler Problem 22 Names scores
- Project Euler:Problem 49 Prime permutations
- Project Euler:Problem 62 Cubic permutations
- PE 24 Lexicographic permutations
- 关于PE458(project euler 458 Permutations of Project)的思考
- projecteuler---->problem=24----Lexicographic permutations
- Problem 24 Lexicographic permutations (全排列)
- Problem 24 Lexicographic permutations (全排列)
- Project Euler
- project euler
- Project Euler
- java自动类型转换
- hdu 1255 覆盖的面积(线段树+扫描线)
- 20171015学习《css权威指南》1-6章
- NiFi学习笔记(二)——基本操作介绍
- ros学习笔记--ros的服务
- Matlab编程 Project Euler Problem24 : Lexicographic permutations
- 从tomcat8.0开始,URIEncoding默认值不再是ISO8859-1,而变成了UTF-8
- 阿里巴巴Java开发规约插件使用
- 使用dir列出包含继承的属性
- 如何隐藏你的Linux的命令行历史
- Hdu 3853 LOOPS DP求期望
- pandaroboot使用
- 【Java项目】添加教职工
- FZU 2108(AC自动机)