方格填数-2015决赛C语言A组第一题
在2行5列的格子中填入1到10的数字。 要求: 相邻的格子中的数,右边的大于左边的,下边的大于上边的。
请你计算一共有多少种可能的方案。
请提交该整数,不要填写任何多余的内容(例如:说明性文字)。(答案: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组第一题的更多相关文章
- 机器人数目-2015决赛Java语言C组第一题
标题:机器人数目 少年宫新近邮购了小机器人配件,共有3类,其中,A类含有:8个轮子,1个传感器B类含有: 6个轮子,3个传感器C类含有:4个轮子,4个传感器 他们一共订购了100套机器人,收到了轮子6 ...
- 胡同门牌号-2015决赛Java语言A组第一题
标题:胡同门牌号 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的.有一天小明突然发现了有趣的事情:如果除去小明家不算,胡同里的其它门牌号加起来,刚好是 ...
- 分机号-2015决赛C语言C组第一题
标题:分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, 766,918,201 就不符合要 ...
- 积分之迷-2015决赛C语言B组第一题
标题:积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C. 为了促销,每件商品都会返固定的积分. 小明开业第一天收到了三笔订单: 第一笔:3个A + 7个B + 1个C,共返积分:315 ...
- 方程整数解-2015省赛C语言A组第一题
方程整数解 方程: a^2 + b^2 + c^2 = 1000(或参见[图1.jpg])这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解.你能算出另一组合适的解吗? 请填写该解中最小的数 ...
- java算法 蓝桥杯(题+答案) 方格填数
6.方格填数 (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...
- 蓝桥杯比赛javaB组练习《方格填数》
方格填数 如下的10个格子 +--+--+--+ | | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+ ( ...
- java算法 第七届 蓝桥杯B组(题+答案) 6.方格填数
6.方格填数 (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...
- c++_方格填数(最新方法)
方格填数 如下的10个格子 +--+--+--+ | | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+ (如果显示有问题,也可以参 ...
随机推荐
- WPF学习笔记(3):ListView根据内容自动调整列宽
DataGrid中,只要不设置DataGrid的宽度和列宽度,或者将宽度设置为Auto,那么表格就会根据内容自动调整宽度,以显示所有内容.但如果是ListView,按以上方法设置,却达不到列宽自动调整 ...
- ASP.Net MVC OA项目笔记<三>
1.1.1 业务层和数据层之间加一个数据会话层,封装所有数据操作类实例的创建(工厂类) 工厂类是负责对象的创建 作用:将BLL和DAL解耦了,提供一个数据访问的统一访问点 数据会话层DBSession ...
- C# Enum枚举类型操作扩展类
使用示例: using System.ComponentModel; namespace SchoolEnterpriseManageSys.Enum { /// <summary> // ...
- Effective C++笔记:继承与面向对象设计
关于OOP 博客地址:http://www.cnblogs.com/ronny 转载请注明出处! 1,继承可以是单一继承或多重继承,每一个继承连接可以是public.protected或private ...
- gunicorn运行显示connection in use解决办法
运行gunicorn后显示如下错误: root@iZ2ze2gihbn4ot85zlcdxdZ:~/myproject# gunicorn -w 4 -b 0.0.0.0:5000 myapp:app ...
- python使用selector模块编写FTP
server import os import socket import time import selectors BASE_DIR = os.path.dirname(os.path.abspa ...
- QQ gtk,bkn算法
public long GetGTK(string sKey) { ; , len = sKey.Length; i < len; ++i) { hash += (hash << ) ...
- Parallel Gradient Boosting Decision Trees
本文转载自:链接 Highlights Three different methods for parallel gradient boosting decision trees. My algori ...
- (转)python WSGI框架详解
原文:https://www.cnblogs.com/shijingjing07/p/6407723.html?utm_source=itdadao&utm_medium=referral h ...
- JavaScript -- Location
-----043-Location.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=&quo ...