广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 5691 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
a7811311622 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖 优秀管理员勋章 社区建设奖
头衔:我…在工作了…我…在工作了…
版主
级别: 版主 该用户目前不上站
版区: CS提问区
推文 x771 鲜花 x2152
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x1
[插件] 程式技巧实做范例:卡布列克常数 (Kaprekar Constant)  (神奇的6174)
久违的教学文呢…

这次解释的是不论是SMA还是其他高阶语言都会用到的一些技巧…
那这次的的范例是从某处看到后引起好奇而写的…
题目的规则:
给定一个整数,你必须以下列的方式产生出另一个整数:
1. 将该数的每一个位数由大到小排列。
2. 将该数的每一个位数由小到大排列。
3. 将上述第一步骤所得的数减掉第二步骤所得的数,产生另一个数。
4. 重复上述步骤,直到出现重复的数字为止。
并输出该数值所产生出"执行次数"。

范例:
Input:
1234

Output:
4321
1234
4321 - 1234 = 3087
8730 -   378 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
最后输出的数值:4
以上的规则是来自黑洞数
至于数学什么的身为过期的大学生早就忘记那是什么啦…

好啦…虽然这好像也是个重点…姑且无视…
这个题目的规则用到的技巧有三个(大概):

1在阵列中比较数值大小并取得最大最小值的阵列位置
2将阵列中的数值重新排列,每个人的排法可能会有差异,我是用「不重复的随机乱数」这写法
3当执行次数只有一次时让未知的执行次数用回圈跑出来

然后这教学的重点…程式码:
故意写成CS版的…某些学生以为捡到现成的程式想偷懒复制贴上的话…这样不行喔~╱/( ◕‿‿◕ )\╲
复制程式
public plugin_init()
{
    register_plugin("Kaprekar constant", "1.0", "MyChat:a7811311622")
    register_concmd("Kaprekar_constant", "kaprekar_constant") // 注册控制台指令
}

public kaprekar_constant(id)
{
    new text[100], text_1[100], text_2[100], text_3[100]
    new i, j, k, num
    read_argv(1, text, sizeof text - 1) // 读取输入的数值
    
    if (!(3 <= strlen(text) <= 4)) return PLUGIN_HANDLED; // 卡布列克常数三位数和四位数的黑洞数只有一个,才列入程式考量
    
    while (!equal(text, text_3)) // 只要第一步骤减掉第二步骤的数和原本的数一样就终结回圈
    {
        num++ // 计数
        if (strlen(text_3)) copy(text, charsmax(text), text_3) // 第三步骤有算出来数才执行第四步骤
        
        copy(text_1, charsmax(text_1), text) // 最初的数复制给第一步骤的数
        copy(text_2, charsmax(text_2), text) // 最初的数复制给第二步骤的数
        
        // 个人比较懒,不想每个位数都要计算,所以比大小我就直接拿字元的ASCII码比大小
        // '0' = 48、'1' = 49、'2' = 50......'9' = 57
        for (i = 0; i < strlen(text_1); i++) // 从大排到小
        {
            new max = 0 // ASCII码最小从0开始
            for (j = i; j < strlen(text_1); j++) // 扫描一遍每位的数字大小,从中比较并取得最大的数
            {
                if (text_1[j] > max)
                {
                    max = text_1[j] // 这里的max是用来记忆最大的数值是多少
                    k = j // 记忆最大数的阵列位置
                }
            }
            // 扫描过后将最大数的位置和最前面数字的位置交换,这写法常见于「不重复的随机乱数」
            max = text_1[k] // 这里的max不再是比大小,只是单纯的暂存数,不想又宣告一个 temp 嘛…
            text_1[k] = text_1[i]
            text_1[i] = max // 如果没用暂存数记忆的话,这时的text_1[k]已经是text_1[i]了,程式就不记得text_1[k]的数是多少了
            // i = 0 时我将数字中最大的数和最左边(最高位数)的数交换了,接下来的 j = i 在比较时就不会比较到上一个最大数
            // 例如范例 1234 这时便成 4231,第二层回圈因为 j = i 会取扫描 231 来比大小,i = 1 时就变成 4321
        }
        // 打了好多字…懒的打…同上…(<ゝω・)
        for (i = 0; i < strlen(text_2); i++)
        {
            new min = 255 // 比大小时「最大」的数总是给最小的…「最小」的数反而给最大的…
            for (j = i; j < strlen(text_2); j++)
            {
                if (text_2[j] < min)
                {
                    min = text_2[j]
                    k = j
                }
            }
            min = text_2[k]
            text_2[k] = text_2[i]
            text_2[i] = min
        }
        num_to_str(str_to_num(text_1) - str_to_num(text_2), text_3, charsmax(text_3)) // 第三步骤
        console_print(id, "%s %s %s %s %d", text, text_1, text_2, text_3, num) // 输出所有的数和目前跑了几次回圈
    }
    
    return PLUGIN_HANDLED;
}
结果:


反正这教学跟现在€$◎无关…不觉得会被盗…
虽然和CS也无关就是了…



尚无签名,欢迎 [新增个性化签名]
献花 x0 回到顶端 [楼 主] From:台湾中华电信股份有限公司 | Posted:2013-06-09 16:35 |
弑血
个人头像
个人文章 个人相簿 个人日记 个人地图
社区建设奖 特殊贡献奖 创作大师奖
小有名气
级别: 小有名气 该用户目前不上站
推文 x108 鲜花 x240
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

a78大~ 我只能说 佩服到底
想不到 过程居然要这么高难


[ 此文章被s8720419在2013-06-09 17:23重新编辑 ]



目前传授教学&有兴趣者可以问我
BOT瞄准攻击NPC&模仿事件触发计算出场&新增地图重生位置等等
已修复entity的attachment错误问题,开始尝试写出各种npc_boss成品
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
献花 x1 回到顶端 [1 楼] From:台湾中华电信股份有限公司 | Posted:2013-06-09 17:11 |
Marchillus 手机 会员卡
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x35 鲜花 x94
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
Re:]
这个   根本要IQ高于150才能理解0-0


2021年,我回来过。
可以关注我的Pixiv喔~主要画日系ACG插画~
https://www.pixiv.net/member.php?id=12398761
献花 x0 回到顶端 [2 楼] From:IANA | Posted:2013-06-12 17:49 |
弑血
个人头像
个人文章 个人相簿 个人日记 个人地图
社区建设奖 特殊贡献奖 创作大师奖
小有名气
级别: 小有名气 该用户目前不上站
推文 x108 鲜花 x240
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
Re:Re:]
下面是引用 ffgh478tw 于 2013-06-12 17:49 发表的 Re:]: 到引言文
这个   根本要IQ高于150才能理解0-0



光是看到 字串的排列 与应用 就让人 头晕


话说 a78大 IQ > 150 ? 



目前传授教学&有兴趣者可以问我
BOT瞄准攻击NPC&模仿事件触发计算出场&新增地图重生位置等等
已修复entity的attachment错误问题,开始尝试写出各种npc_boss成品
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
献花 x0 回到顶端 [3 楼] From:台湾中华电信股份有限公司 | Posted:2013-06-12 22:21 |
a7811311622 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖 优秀管理员勋章 社区建设奖
头衔:我…在工作了…我…在工作了…
版主
级别: 版主 该用户目前不上站
版区: CS提问区
推文 x771 鲜花 x2152
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

正常人类 IQ >= 140 就已经是天才了…
如果我的 IQ 有 140 早就被国家抓去为国家服务而不会在这发废文了…


尚无签名,欢迎 [新增个性化签名]
献花 x0 回到顶端 [4 楼] From:台湾中华电信股份有限公司 | Posted:2013-06-12 22:53 |
弑血
个人头像
个人文章 个人相簿 个人日记 个人地图
社区建设奖 特殊贡献奖 创作大师奖
小有名气
级别: 小有名气 该用户目前不上站
推文 x108 鲜花 x240
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 a7811311622 于 2013-06-12 22:53 发表的 : 到引言文
正常人类 IQ >= 140 就已经是天才了…
如果我的 IQ 有 140 早就被国家抓去为国家服务而不会在这发废文了…



话也不能这么讲


有很多高手 都躲在暗处 做一些 意想不到的事情


搞不好 在研究 超人类的事



目前传授教学&有兴趣者可以问我
BOT瞄准攻击NPC&模仿事件触发计算出场&新增地图重生位置等等
已修复entity的attachment错误问题,开始尝试写出各种npc_boss成品
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
献花 x0 回到顶端 [5 楼] From:台湾中华电信股份有限公司 | Posted:2013-06-13 00:09 |
a23107971a 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x38
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
Re:
又是程式码的东西= =
但这些东西部都有一定的规则只要懂这些规则就能大略理解了....
但本人只是个超新手 表情


献花 x0 回到顶端 [6 楼] From:台湾中华电信股份有限公司 | Posted:2013-06-14 17:24 |
ofgm4521
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

谢谢OwO 表情


献花 x0 回到顶端 [7 楼] From:台湾中华电信股份有限公司 | Posted:2013-06-23 10:59 |
zxzyman 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
小有名气
级别: 小有名气 该用户目前不上站
推文 x40 鲜花 x144
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
程式技巧实做范例:卡布列克常数
我上程式设计约5堂...

虽然只学到毛的部位

不过我以学习的心态   完整的阅读2次        ~(应该没有人会看第二次)




老实说我看不懂                  (一定有人会说: 阿你看无,是在看虾米)

但能知道内容约是不断的定义 让它会运算 

(像您内容说,不想打太多字,所以用公式的方式处理)


我看到最下面 第三部导出时 有一种豁然开朗的感觉

一夕之间复杂的文字 变成会自动运算   这是我觉得最有趣的地方~


[ 此文章被zxzyman在2014-04-04 20:16重新编辑 ]


UWC3NG 终极魔兽-次世代 (繁体中文版)
     -按此连结-   

献花 x0 回到顶端 [8 楼] From:未知地址 | Posted:2014-04-04 19:55 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.092250 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言