Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_algorithm
提交
8dceb2d8
S
skill_tree_algorithm
项目概览
CSDN 技术社区
/
skill_tree_algorithm
通知
9
Star
8
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8dceb2d8
编写于
10月 28, 2021
作者:
每日一练社区
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update exercises
上级
a8113757
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
199 addition
and
40 deletion
+199
-40
data/1.算法初阶/1.蓝桥杯/带分数/solution.cpp
data/1.算法初阶/1.蓝桥杯/带分数/solution.cpp
+25
-35
data/1.算法初阶/1.蓝桥杯/带分数/solution.md
data/1.算法初阶/1.蓝桥杯/带分数/solution.md
+174
-5
未找到文件。
data/1.算法初阶/1.蓝桥杯/带分数/solution.cpp
浏览文件 @
8dceb2d8
/*
Name: 蓝桥杯:带分数(全排列)
Copyright: 本算法由KeepThinking_提供
Author: Jopus
Date: 08/02/14 19:57
Description: dev-cpp 5.5.3
*/
#include <stdio.h>
/*思路:将list[1,2,3,4,5,6,7,8,9]数组进行全排列,然后对于每一种排列进行处理
处理方法:将list数组划分为三部分a,b,c,判断是否满足number == a+b/c && b%c == 0;
具体见分析.........
*/
int
x
=
0
,
number
=
0
,
count
=
0
;
//交换a,b两数
void
Swap
(
int
&
a
,
int
&
b
)
{
int
temp
=
a
;
a
=
b
;
b
=
temp
;
}
//将数组区间转化为数字
int
getNum
(
int
list
[],
int
f
,
int
r
)
{
int
i
=
0
,
num
=
0
;
for
(
i
=
f
;
i
<=
r
;
i
++
)
num
=
list
[
i
]
+
num
*
10
;
//进位
num
=
list
[
i
]
+
num
*
10
;
return
num
;
}
//进行全排列并对每种排列结果进行处理
void
Prim
(
int
list
[],
int
k
,
int
m
)
{
if
(
k
==
m
-
1
)
//前缀是最后一个位置,此时出现一种排列数.
if
(
k
==
m
-
1
)
{
int
a
=
0
,
b
=
0
,
c
=
0
,
bLast
=
0
;
//带分数:a+b/c
for
(
int
i
=
0
;
i
<
x
;
i
++
)
//i表示a的末尾位置,不会超过number位数
int
a
=
0
,
b
=
0
,
c
=
0
,
bLast
=
0
;
for
(
int
i
=
0
;
i
<
x
;
i
++
)
{
a
=
getNum
(
list
,
0
,
i
);
//将list数组中的[0-i]转化为数字,赋值给a
bLast
=
((
number
-
a
)
*
list
[
8
])
%
10
;
//确定b最后一个数字
for
(
int
j
=
i
+
(
8
-
i
)
/
2
;
j
<
8
;
j
++
)
//从list数组中间位置开始找b末尾位置
a
=
getNum
(
list
,
0
,
i
);
bLast
=
((
number
-
a
)
*
list
[
8
])
%
10
;
for
(
int
j
=
i
+
(
8
-
i
)
/
2
;
j
<
8
;
j
++
)
{
if
(
list
[
j
]
==
bLast
)
//找到b尾部
if
(
list
[
j
]
==
bLast
)
{
b
=
getNum
(
list
,
i
+
1
,
j
);
//将list数组中的[i+1-j]转化为数字,赋值给b
c
=
getNum
(
list
,
j
+
1
,
8
);
//将list数组中的[j+1-8]转化为数字,赋值给c
if
(
b
%
c
==
0
&&
a
+
b
/
c
==
number
)
//判断合理性
b
=
getNum
(
list
,
i
+
1
,
j
);
c
=
getNum
(
list
,
j
+
1
,
8
);
if
(
b
%
c
==
0
&&
a
+
b
/
c
==
number
)
{
// printf("%d+%d/%d\n",a,b,c); //打印每种情况
++
count
;
}
break
;
...
...
@@ -55,29 +44,29 @@ void Prim(int list[], int k, int m)
}
else
{
for
(
int
i
=
k
;
i
<
m
;
i
++
)
//全排列数组list[]
for
(
int
i
=
k
;
i
<
m
;
i
++
)
{
//交换前缀,使之产生下一个前缀.
Swap
(
list
[
k
],
list
[
i
]);
//>>A
Prim
(
list
,
k
+
1
,
m
);
//>>B
//将前缀换回来,继续做上一个的前缀排列.//>>C
Swap
(
list
[
k
],
list
[
i
]);
Prim
(
list
,
k
+
1
,
m
);
Swap
(
list
[
k
],
list
[
i
]);
}
}
}
//主函数
int
main
()
{
int
temp
=
0
;
int
list
[]
=
{
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
};
//定义全排列数组
int
list
[]
=
{
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
};
scanf
(
"%d"
,
&
number
);
temp
=
number
;
while
(
temp
!=
0
)
//统计number总共多少位
while
(
temp
!=
0
)
{
++
x
;
temp
/=
10
;
}
Prim
(
list
,
0
,
9
);
printf
(
"%d"
,
count
);
//打印总共多少种
printf
(
"%d"
,
count
);
return
0
;
}
\ No newline at end of file
data/1.算法初阶/1.蓝桥杯/带分数/solution.md
浏览文件 @
8dceb2d8
...
...
@@ -36,30 +36,199 @@
## aop
### before
```
cpp
#include <stdio.h>
int
x
=
0
,
number
=
0
,
count
=
0
;
void
Swap
(
int
&
a
,
int
&
b
)
{
int
temp
=
a
;
a
=
b
;
b
=
temp
;
}
int
getNum
(
int
list
[],
int
f
,
int
r
)
{
int
i
=
0
,
num
=
0
;
for
(
i
=
f
;
i
<=
r
;
i
++
)
num
=
list
[
i
]
+
num
*
10
;
return
num
;
}
```
### after
```
cpp
int
main
()
{
int
temp
=
0
;
int
list
[]
=
{
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
};
scanf
(
"%d"
,
&
number
);
temp
=
number
;
while
(
temp
!=
0
)
{
++
x
;
temp
/=
10
;
}
Prim
(
list
,
0
,
9
);
printf
(
"%d"
,
count
);
return
0
;
}
```
## 答案
```
cpp
void
Prim
(
int
list
[],
int
k
,
int
m
)
{
if
(
k
==
m
-
1
)
{
int
a
=
0
,
b
=
0
,
c
=
0
,
bLast
=
0
;
for
(
int
i
=
0
;
i
<
x
;
i
++
)
{
a
=
getNum
(
list
,
0
,
i
);
bLast
=
((
number
-
a
)
*
list
[
8
])
%
10
;
for
(
int
j
=
i
+
(
8
-
i
)
/
2
;
j
<
8
;
j
++
)
{
if
(
list
[
j
]
==
bLast
)
{
b
=
getNum
(
list
,
i
+
1
,
j
);
c
=
getNum
(
list
,
j
+
1
,
8
);
if
(
b
%
c
==
0
&&
a
+
b
/
c
==
number
)
{
++
count
;
}
break
;
}
}
}
}
else
{
for
(
int
i
=
k
;
i
<
m
;
i
++
)
{
Swap
(
list
[
k
],
list
[
i
]);
Prim
(
list
,
k
+
1
,
m
);
Swap
(
list
[
k
],
list
[
i
]);
}
}
}
```
## 选项
### A
```
cpp
void
Prim
(
int
list
[],
int
k
,
int
m
)
{
if
(
k
==
m
-
1
)
{
int
a
=
0
,
b
=
0
,
c
=
0
,
bLast
=
0
;
for
(
int
i
=
0
;
i
<
x
;
i
++
)
{
a
=
getNum
(
list
,
0
,
i
);
bLast
=
((
number
-
a
)
*
list
[
8
])
%
10
;
for
(
int
j
=
i
+
(
8
-
i
)
/
2
;
j
<
8
;
j
++
)
{
if
(
list
[
j
]
==
bLast
)
{
b
=
getNum
(
list
,
i
,
j
);
c
=
getNum
(
list
,
j
,
8
);
if
(
b
%
c
==
0
&&
a
+
b
/
c
==
number
)
{
++
count
;
}
break
;
}
}
}
}
else
{
for
(
int
i
=
k
;
i
<
m
;
i
++
)
{
Swap
(
list
[
k
],
list
[
i
]);
Prim
(
list
,
k
+
1
,
m
);
Swap
(
list
[
k
],
list
[
i
]);
}
}
}
```
### B
```
cpp
void
Prim
(
int
list
[],
int
k
,
int
m
)
{
if
(
k
==
m
-
1
)
{
int
a
=
0
,
b
=
0
,
c
=
0
,
bLast
=
0
;
for
(
int
i
=
0
;
i
<
x
;
i
++
)
{
a
=
getNum
(
list
,
0
,
i
);
bLast
=
((
number
-
a
)
*
list
[
8
])
%
10
;
for
(
int
j
=
i
+
(
8
-
i
)
/
2
;
j
<
8
;
j
++
)
{
b
=
getNum
(
list
,
i
,
j
);
c
=
getNum
(
list
,
j
,
8
);
if
(
b
%
c
==
0
&&
a
+
b
/
c
==
number
)
{
++
count
;
}
break
;
}
}
}
else
{
for
(
int
i
=
k
;
i
<
m
;
i
++
)
{
Swap
(
list
[
k
],
list
[
i
]);
Prim
(
list
,
k
+
1
,
m
);
Swap
(
list
[
k
],
list
[
i
]);
}
}
}
```
### C
```
cpp
void
Prim
(
int
list
[],
int
k
,
int
m
)
{
if
(
k
==
m
-
1
)
{
int
a
=
0
,
b
=
0
,
c
=
0
,
bLast
=
0
;
for
(
int
i
=
0
;
i
<
x
;
i
++
)
{
a
=
getNum
(
list
,
0
,
i
);
bLast
=
((
number
-
a
)
*
list
[
8
])
%
10
;
for
(
int
j
=
i
+
(
8
-
i
)
/
2
;
j
<
8
;
j
++
)
{
if
(
list
[
j
]
==
bLast
)
{
b
=
getNum
(
list
,
i
+
1
,
j
);
c
=
getNum
(
list
,
j
+
1
,
8
);
++
count
;
break
;
}
}
}
}
else
{
for
(
int
i
=
k
;
i
<
m
;
i
++
)
{
Swap
(
list
[
k
],
list
[
i
]);
Prim
(
list
,
k
+
1
,
m
);
Swap
(
list
[
k
],
list
[
i
]);
}
}
}
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录