搜索
查看: 807|回复: 15

[小学数学] 思维100四年级练习题

[复制链接]
发表于 2024-10-11 09:41 | 显示全部楼层 |阅读模式 来自: 中国上海
一个字母串包含了 11 个字母(这 11 个字母排成一行),所有字母只能从 ABC 中选取(有些字母可以不出现,比如某个字母串只包含了 AB 这两种字母)。要求任意三个相邻的字母不能相同,并且整个字母串是一个回文串,也就是说从左读到右和从右读到左是相同的字母串。不同的排法有________种。

这个题怎么解呢?

发表于 2024-10-11 11:07 | 显示全部楼层 来自: 中国上海
本帖最后由 SimonYang 于 2024-10-11 11:23 编辑

帮顶。紫薯紫薯
发表于 2024-10-11 12:59 | 显示全部楼层 来自: 中国上海
怎么感觉题目有问题。
发表于 2024-10-11 14:47 | 显示全部楼层 来自: 中国江苏苏州
第六位6种第五位5种,再分第三位与第五位同和不同两种情况
发表于 2024-10-11 15:03 来自手机浏览器 | 显示全部楼层 来自: 中国上海
回文,那么第五位和第七位应该一样,怎么任意三个相邻不能相同
发表于 2024-10-11 16:07 来自手机浏览器 | 显示全部楼层 来自: 中国上海
染色问题?
发表于 2024-10-11 17:56 | 显示全部楼层 来自: 中国上海
我只想到一个笨办法,分情况讨论。
因为是回文形式的字符串,所以后5个与前5个对称。因此只需考虑前6个字符串的排列组合。又由于是回文,所以第5个和第6个字符串不能相同。因此定下来前5个字符串,那么X2就能包含所有的情况。
前5个字符的选择只能是410,320,311,221。排列分别是1*6,(P5/P3*P2-3)*6,(P5/P3-6)*3,(P5/P2*P2)*3。
=(6+42+42+90)*2=360
我排列组合比较弱,不知道对不对。。。

不知道怎么打上下脚标,Px表示x的全排列
 楼主| 发表于 2024-10-11 18:10 | 显示全部楼层 来自: 中国上海
本帖最后由 bob_2024 于 2024-10-11 18:12 编辑

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test {

        public static void main(String[] args) {
                List<String> chars = new ArrayList<>();
                chars.add("A");
                chars.add("B");
                chars.add("C");
                List<String> list = add("", chars, 1);
                List<String> result = new ArrayList<>();
                for (String temp : list) {
                        if (!invalid(temp)) {
                                result.add(temp);
                        }
                }
                System.out.println(result.size());
                for (String temp : result) {
                        System.out.println(temp);
                }
        }

        private static List<String> add(String str, List<String> chars, int index) {
                if (index > 6) {
                        return Collections.emptyList();
                }
                List<String> result = new ArrayList<>();
                for (String temp : chars) {
                        if (index == 6) {
                                result.add(str + temp);
                        } else {
                                result.addAll(add(str + temp, chars, index + 1));
                        }
                }
                return result;
        }

        public static boolean invalid(String str) {
                char previous = str.charAt(0);
                int duplicateCount = 1;
                for (int i = 1; i < str.length(); i++) {
                        char current = str.charAt(i);
                        if (current != previous) {
                                duplicateCount = 1;
                                previous = current;
                        } else {
                                duplicateCount++;
                                // 从头开始三位相同的排除
                                if (duplicateCount >= 3) {
                                        return true;
                                }
                        }
                }
                // 最后两位相同排除
                if (duplicateCount >= 2) {
                        return true;
                }
                return false;
        }

}

写了一个Java程序,先对6位进行全排列,再排除三个相同的和末两位相同的,答案是360。但是不知道怎么用排列组合来算。
360
AABAAB
AABAAC
AABABA
AABABC
AABACA
AABACB
AABBAB
AABBAC
AABBCA
AABBCB
AABCAB
AABCAC
AABCBA
AABCBC
AABCCA
...
发表于 2024-10-11 21:52 | 显示全部楼层 来自: 中国上海
3×2×(3^4-3×(1+2×2)-2×3)=360
发表于 2024-10-12 08:56 | 显示全部楼层 来自: 中国上海
vitem2009 发表于 2024-10-11 21:52
3×2×(3^4-3×(1+2×2)-2×3)=360

简洁,牛啊
 楼主| 发表于 2024-10-12 13:19 | 显示全部楼层 来自: 中国上海
vitem2009 发表于 2024-10-11 21:52
3×2×(3^4-3×(1+2×2)-2×3)=360

能说明一下排除的计算思路吗?
发表于 2024-10-12 13:33 | 显示全部楼层 来自: 中国上海

惭愧惭愧。
发表于 2024-10-12 13:36 | 显示全部楼层 来自: 中国上海
bob_2024 发表于 2024-10-12 13:19
能说明一下排除的计算思路吗?

不妨固定中间为A,A的邻居为B,之后半边剩4个。这4个,只需从所有可能中去掉恰有3个一样的,去掉恰有4个一样的,去掉恰有两个BB开头的。
 楼主| 发表于 2024-10-12 14:32 | 显示全部楼层 来自: 中国上海
谢谢!根据你的思路,整理如下:
从左到右依次标记为: 1  2  3  4  5  6

第一步,排第6位,有3种
第二步,排第5位,只能从剩下两个里面选,有2种
第三步,排1~4位,全排列有3*3*3*3种,需要排除掉以下情况:
     1. 只有3、4位与5位一样,有第1位的2种*第2位的2种*第3位的3种
     2. 只有2、3、4或只有1、2、3连续3位一样,有3*2种
     3. 1、2、3、4都一样,有3种
所以,总数为 3*2*( 3*3*3*3 - 2*2*3 - 3*2 - 3 ) = 360
发表于 2024-10-13 21:04 | 显示全部楼层 来自: 中国上海
这是四年级的题啊?。。
发表于 2024-10-21 09:39 | 显示全部楼层 来自: 中国上海
谢谢分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|千帆网 ( 沪ICP备15002998号-1 )上海千教教育科技有限公司,邮箱:admin@qianfanedu.cn 举报电话:54804512

GMT+8, 2024-12-23 14:24 , Processed in 0.105339 second(s), 16 queries .

快速回复 返回顶部 返回列表