我是靠谱客的博主 落寞大神,这篇文章主要介绍东华大学 2022 oj c++ 无超纲写法 环,现在分享给大家,希望可以做个参考。

明明喜欢玩游戏,而明明的爸爸也乐意陪明明玩各种各样的小游戏。但是在游戏中,明明的爸爸又十分注意培养明明的智力,他希望通过游戏,不仅能让明明得到快乐,而且又能让明明学到一些知识,锻炼他的思维能力,为将来的发展打下基础。

一天,明明的爸爸和明明做起了一个叫“环”的游戏。游戏的内容很简单但却很有趣,就是有1到9九个整数,他们以任意的顺序排列成一个圆环,然后要在这个圆环中剪一刀,再分别按顺时针和逆时针次序排列成两个九位数。现在的要求是,得到的这两个九位数差的绝对值能被396整除,问一共有几种剪环的方法。 例如九个数的排列为:1、2、3、4、5、6、7、8、9,在1和9之间剪一刀(注意:因为是一个环,所以1和9是相邻的。),顺时针形成的数为:123456789,逆时针形成的数为:987654321,这两个数的差的绝对值为:864197532,这个数能被396整除,因此这是一种符合规则的剪法,更奇妙的是,这也是这种排序方式的唯一剪法。

明明显然对这个游戏非常感兴趣,高兴地做起来。但是玩了几次后,明明发现这个游戏又并不是那么容易了,因为对于这九个数来说,虽然一共只有九种剪法,但是每种方法都要试,且还要做加法再做除法,他觉得非常的麻烦,玩着玩着就失去了兴趣。明明的爸爸发现了这个问题,于是就找到了你,他请你来帮明明一把,写一个程序,计算出某个排序中符合条件的剪法共有几种,这样的话可以大大鼓励明明玩游戏的兴致。

明明爸爸的问题可以归结为:将1至9这九个数字,以任意顺序排成一个环,请在某两个数字之间剪开,分别按顺时针和逆时针次序排列成两个九位数,要求剪开后所得到的这两个九位数的差能被396整除,问共有几种剪法?

 

AC代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <bits/stdc++.h> #include<iostream> #include<string> using namespace std; long long reverse(long long num)//数字逆序函数 { long long rev = 0; while (num) { rev = 10 * rev + num % 10; num /= 10; } return(rev); } void move(long long x[], int n)//n为数组中元素个数,将数组中的元素整体左移,第一个放到最后一个 { long long tmp = x[0]; for (int i = 0; i <= n - 2; i++) { x[i] = x[i + 1]; } x[n - 1] = tmp; } int main() { int n=0; cin>>n; while(n--) { int cnt=0; long long a[11];//类型用long long,保险点 for(int i=0;i<9;++i) {cin>>a[i];}//读入9个数字的顺序 for(int k=1;k<=9;++k)//对于每一个“环”,移动九次,就是全部排序了 { long long sum=0; move(a,9);//移动 int i=8;//下面这几行是求出这9个数的具体值 for(int p=1;i>=0;p*=10,i--) { sum+=p*a[i]; } //下面进行判断是否符合条件(整除于396) if((sum-reverse(sum))%396==0 ||(reverse(sum)-sum)%396==0) {cnt++;} } cout<<cnt<<endl; //cout<<sum<<endl; } return 0; }

最后

以上就是落寞大神最近收集整理的关于东华大学 2022 oj c++ 无超纲写法 环的全部内容,更多相关东华大学内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部