在2行5列的格子中填入1到10的数字。 要求: 相邻的格子中的数,右边的大于左边的,下边的大于上边的。

如【图1.png】所示的2种,就是合格的填法。
请你计算一共有多少种可能的方案。
请提交该整数,不要填写任何多余的内容(例如:说明性文字)。(答案:42)

 public class Main{

     static int sum = 0;

     public static void main(String[] args){
int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
sort(num, 1);
System.out.println(sum);
} // 全排列10个数字
public static void sort(int[] str, int start){
for(int i = start; i < str.length-1; i++){
if(i>start){
jiaohuan(str, start, i);
}
if(start == str.length-2){
// 输出初始状态
bianli(str); // abc
// 交换后两位,并输出
jiaohuan(str, str.length-1, str.length-2);
bianli(str); // acb
// 复位第16行
jiaohuan(str, str.length-1, str.length-2);//恢复到abc
return;
}else{
sort(str, start+1);
}
if(i>start){
jiaohuan(str, start, i);
}
}
} public static void bianli(int[] arr){
if(arr[0]<arr[1] && arr[1]<arr[2] && arr[2]<arr[3] && arr[3]<arr[4]
&& arr[5]<arr[6] && arr[6]<arr[7] && arr[7]<arr[8] && arr[8]<arr[9]
&& arr[0]<arr[5]&& arr[1]<arr[6] && arr[2]<arr[7] && arr[3]<arr[8] && arr[4]<arr[9]){
sum++;
}
} public static void jiaohuan(int[] arr, int a, int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}

这道题使用了全排列来解题!关于全排列,我使用如下的方式来总结:

 public class Demo01{

     static int num = 0;

     public static void main(String[] args){
String[] str = {"a", "b", "c"};
// PaiLie(str);
// PaiLie000000(str, 0); String[] str1 = {"a", "b", "c", "d"};
// PaiLie11(str1, 0);
// PaiLie000000(str1, 0); String[] str2 = {"a", "b", "c", "d", "e"};
// PaiLie22(str2);
PaiLie000000(str2, 0); } //a b
public static void PaiLie00(String[] arr,int start){
for(int i= start; i<arr.length; i++){
if(i>start){
JiaoHuan(arr, start, i);
}
// ÏÔʾbac
BianLi(arr);
if(i>start){
JiaoHuan(arr, start, i);
}
}
} // a b c
public static void PaiLie(String[] arr, int start){
for(int i= start; i<arr.length; i++){
if(i>start){
JiaoHuan(arr, start, i);
}
PaiLie00(arr, start+1);
if(i>start){
JiaoHuan(arr, start, i);
}
}
} // a b c d
public static void PaiLie11(String[] arr, int start){
for(int i= start; i<arr.length; i++){
if(i>start){
JiaoHuan(arr, start, i);
}
PaiLie(arr, start+1);
if(i>start){
JiaoHuan(arr, start, i);
}
}
} // a b c d e
public static void PaiLie22(String[] arr){
for(int i= 0; i<arr.length; i++){
if(i>0){
JiaoHuan(arr, 0, i);
}
PaiLie11(arr, 1);
if(i>0){
JiaoHuan(arr, 0, i);
}
}
} public static void PaiLie000000(String[] arr, int start){
for(int i= start; i<arr.length; i++){
if(i>start){
JiaoHuan(arr, start, i);
}
if(start==arr.length-1){
BianLi(arr);
return;
}
PaiLie000000(arr, start+1);
if(i>start){
JiaoHuan(arr, start, i);
}
}
} public static void BianLi(String[] arr){
num++;
System.out.print(num+": ");
for(int i = 0; i< arr.length; i++){
System.out.print(arr[i]+"\t");
}
System.out.println();
} public static void JiaoHuan(String[] arr, int a, int b){
String temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}

搞懂了全排列,这道题就很简单了,下边的题目也是类似的:

看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆
如果每个五角星代表 1 ~ 9 的不同的数字。
这个算式有多少种可能的正确填写方法?
    295 + 173 = 468
    173 + 295 = 468
    183 + 492 = 675
以上都是正确的填写法!
    注意:
    111 + 222 = 333 是错误的填写法!
    因为每个数字必须是不同的! 
    也就是说:1~9中的所有数字,每个必须出现且仅出现一次!

 

方格填数-2015决赛C语言A组第一题的更多相关文章

  1. 机器人数目-2015决赛Java语言C组第一题

    标题:机器人数目 少年宫新近邮购了小机器人配件,共有3类,其中,A类含有:8个轮子,1个传感器B类含有: 6个轮子,3个传感器C类含有:4个轮子,4个传感器 他们一共订购了100套机器人,收到了轮子6 ...

  2. 胡同门牌号-2015决赛Java语言A组第一题

    标题:胡同门牌号 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的.有一天小明突然发现了有趣的事情:如果除去小明家不算,胡同里的其它门牌号加起来,刚好是 ...

  3. 分机号-2015决赛C语言C组第一题

    标题:分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, 766,918,201 就不符合要 ...

  4. 积分之迷-2015决赛C语言B组第一题

    标题:积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C. 为了促销,每件商品都会返固定的积分. 小明开业第一天收到了三笔订单: 第一笔:3个A + 7个B + 1个C,共返积分:315 ...

  5. 方程整数解-2015省赛C语言A组第一题

    方程整数解 方程: a^2 + b^2 + c^2 = 1000(或参见[图1.jpg])这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解.你能算出另一组合适的解吗? 请填写该解中最小的数 ...

  6. java算法 蓝桥杯(题+答案) 方格填数

    6.方格填数  (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...

  7. 蓝桥杯比赛javaB组练习《方格填数》

    方格填数 如下的10个格子   +--+--+--+   |  |  |  |+--+--+--+--+|  |  |  |  |+--+--+--+--+|  |  |  |+--+--+--+ ( ...

  8. java算法 第七届 蓝桥杯B组(题+答案) 6.方格填数

    6.方格填数  (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...

  9. c++_方格填数(最新方法)

      方格填数 如下的10个格子 +--+--+--+ | | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+ (如果显示有问题,也可以参 ...

随机推荐

  1. WPF自定义TabControl样式

    WPF自定义TabControl,TabControl美化 XAML代码: <TabControl x:Class="SunCreate.Common.Controls.TabCont ...

  2. Hiho #1075: 开锁魔法III

    Problem Statement 描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜 ...

  3. C/C++掌握技能(三)

    #include<cstdio> ][]={ //平年和闰年的每个月的天数 {,},{,},{,},{,},{,},{,},{,}, {,},{,},{,},{,},{,},{,} }; ...

  4. 浏览器特权域XSS漏洞

    导语:科普什么是浏览器特权域XSS,可以用来干什么? 作者:天析 团队:Arctic Shell 为什么科普这个? 今天在群里看到有表姐说这个,然后恰好又有学姐在问什么是特权域XSS,于是就来说说这个 ...

  5. Linux玩转redis从入门到放肆--1.缓存击穿

    1. 缓存穿透在大多数互联网应用中,缓存的使用方式如下图所示: 1.当业务系统发起某一个查询请求时,首先判断缓存中是否有该数据:2.如果缓存中存在,则直接返回数据:3.如果缓存中不存在,则再查询数据库 ...

  6. 为什么学习linux

      目录                                                          为什么学习linux Linux简介 开源共享精神 红帽认证 为什么学习li ...

  7. CENTOS安装ElasticSearch(转)

    From: https://my.oschina.net/topeagle/blog/591451?fromerr=mzOr2qzZ CENTOS安装ElasticSearch ElasticSear ...

  8. EFCore.MySql当模型遇到int[]怎么办

    我使用的是Pomole.EntityFrameworkCore.MySql 需要将旧项目中的excels表转成实体,其中有一列是json格式的int[] 当遇到第一张表的时候,我使用了这样的方法来读取 ...

  9. numpy中int类型与python中的int

    [code] import numpy as np nparr = np.array([[1 ,2, 3, 4]]) np_int32 = nparr[0][0] # np_int=1 py_int ...

  10. logstash安装与logstash-input-jdbc插件使用

    ElasticSearch的索引可以手动添加索引的,就是类似下面这样添加的 PUT /movies/movie/1 { "title": "The Godfather&q ...