吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4075|回复: 34
收起左侧

[Python 转载] 打印9*9乘法表,解决数学问题,c和python,谁更方便?

  [复制链接]
无闻无问 发表于 2020-10-10 11:55
本帖最后由 无闻无问 于 2020-10-10 14:41 编辑

c语言还没到家,现在脑门一热,学习了一下python,遂用二个工具编写9*9乘法表进行对比,感觉python编写速度真不错!
#include "stdafx.h"
int main()
{
    for (int i = 1; i <= 9; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            printf("%d*%d=%d\t", j, i, i*j);
        }
        printf("\n");
    }
    getchar();
    getchar();
    return 0;
}
-------------------------------------------------------------------
for i in range(1,10):
    for j in range(1,i+1):
        print(str(j)+'*'+str(i)+'='+str(i*j)+'\t',end='')
    print('\n')



还有这位仁兄的问题,用c真的麻烦,生成字符串算式后,还要慢慢处理算式并计算结果,可能是我的技术太low了,用python直接一个eval就将字符串表达式进行了计算并返回结果。

124024lwop8yyhjjo8sarz.png



https://www.52pojie.cn/thread-1274703-1-1.html


用c 语言,我的代码(初学不到家),太菜,采用的方式及算法也极不科学,大神手下留情,还请高手们指教改进……


int  checkok(int tempInputNum[15]);
int main()
{
    int totalNum = 0, totalOk = 0;
    int suanShi[15] = { 6,'\0',7,'\0',11,'\0',3,'\0',2,'\0',5,'\0',12 };
    printf("在这些数字中间填上+-*/使算式成立:6 7 11 3 2 5 12=9 \n");
    int a, b, c, d, e, f;
    for (a = 0; a < 4; a++)
        for (b = 0; b < 4; b++)
            for (c = 0; c < 4; c++)
                for (d = 0; d < 4; d++)
                    for (e = 0; e < 4; e++)
                        for (f = 0; f < 4; f++)
                        {
                            //遍历生成算式
                            if (a == 0) { suanShi[1]  = '+'; }
                            if (a == 1) { suanShi[1]  = '-'; }
                            if (a == 2) { suanShi[1]  = '*'; }
                            if (a == 3) { suanShi[1]  = '/'; }

                            if (b == 0) { suanShi[3] = '+'; }
                            if (b == 1) { suanShi[3] = '-'; }
                            if (b == 2) { suanShi[3] = '*'; }
                            if (b == 3) { suanShi[3] = '/'; }

                            if (c == 0) { suanShi[5]  = '+'; }
                            if (c == 1) { suanShi[5]  = '-'; }
                            if (c == 2) { suanShi[5]  = '*'; }
                            if (c == 3) { suanShi[5]  = '/'; }

                            if (d == 0) {suanShi[7]  = '+'; }
                            if (d == 1) {suanShi[7]  = '-'; }
                            if (d == 2) {suanShi[7]  = '*'; }
                            if (d == 3) {suanShi[7]  = '/'; }

                            if (e == 0) {suanShi[9]  = '+'; }
                            if (e == 1) {suanShi[9]  = '-'; }
                            if (e == 2) {suanShi[9]  = '*'; }
                            if (e == 3) {suanShi[9]  = '/'; }
                                       
                            if (f == 0) {suanShi[11]  = '+'; }
                            if (f == 1) {suanShi[11]  = '-'; }
                            if (f == 2) {suanShi[11]  = '*'; }
                            if (f == 3) {suanShi[11]  = '/'; }
                            //检查算式是否符合要求。
                            totalNum ++;
                            int sum = checkok(suanShi);
                            if (sum==9)
                            {
                                totalOk++;
                                printf("6%c7%c11%c3%c2%c5%c12=9\n", suanShi[1], suanShi[3], suanShi[5],                                                                    suanShi[7], suanShi[9], suanShi[11]);
                                //int sumTemp = checkok(suanShi);
                            }
                        }
    printf("===========计算完毕!总计%d个算式!其中达到要求的有:%d个===========", totalNum, totalOk);
    getchar();
    getchar();
    return 0;
}


//检查算式是否符合要求。
int checkok(int tempInputNum[15])
{
    int tempNumber = 0;
    int jishu = 0;
    int colume[15] = { '\0' };
    for(int numToNnum=0;numToNnum<15;numToNnum++)
        colume[numToNnum]= tempInputNum[numToNnum];
    bool panduan = false;
    bool panduan2 = false;
    ///////////////////////////////////////遍历运算完乖除//////////////////////////////
    do
    {
        panduan = false;
        for (int i = 1; i < 14; i++)
        {
            if (colume == '*' || colume == '/')
            {
                //如果是乘
                if (colume == '*')
                {
                    tempNumber = colume[i - 1] * colume[i + 1];
                    colume[i - 1] = tempNumber;
                    colume = '\0';
                    colume[i + 1] = '\0';

                    //将剩下的数向前移2位
                    int num1 = 0, arry1 = 0; int  tempSwap = 0;
                    for (num1 = 0; num1 < 2; num1++)
                        for (arry1 = i; arry1 < 14 - 1; arry1++)
                        {
                            tempSwap = colume[arry1];
                            colume[arry1] = colume[arry1 + 1];
                            colume[arry1 + 1] = tempSwap;
                        }
                    break;//退出计算
                }
                else if (colume == '/')    //如果是除
                {
                    if (colume[i - 1] % colume[i + 1] != 0) return 0;//产生余数直接返回0
                    tempNumber = colume[i - 1] / colume[i + 1];
                    colume[i - 1] = tempNumber;
                    colume = '\0';
                    colume[i + 1] = '\0';

                    //将剩下的数向前移2位
                    int num1 = 0, arry1 = 0; int  tempSwap = 0;
                    for (num1 = 0; num1 < 2; num1++)
                        for (arry1 = i; arry1 < 14 - 1; arry1++)
                        {
                            tempSwap = colume[arry1];
                            colume[arry1] = colume[arry1 + 1];
                            colume[arry1 + 1] = tempSwap;
                        }
                    break;//退出计算
                }
            }
        }
        //检查是否还有*/
        for (int checksym = 1; checksym < 13; checksym+=2)
        {
            if (colume[checksym] == '*' || colume[checksym] == '/')
            {
                panduan = true;
                break;
            }
        }

    } while (panduan == true);
    ///////////////////////////////////////遍历运算完+-//////////////////////////////
    do {
        //如果是加减,计算并退出本次循环
        panduan2 = false;
        for (int i = 1; i < 14; i++)
            if (colume == '+' || colume == '-')
            {
                //如果是+
                if (colume == '+')
                {
                    tempNumber = colume[i - 1] + colume[i + 1];
                    colume[i - 1] = tempNumber;
                    colume = '\0';
                    colume[i + 1] = '\0';


                    //将剩下的数向前移2位
                    int num1 = 0, arry1 = 0; int  tempSwap = 0;
                    for (num1 = 0; num1 < 2; num1++)
                        for (arry1 = i; arry1 < 14 - 1; arry1++)
                        {
                            tempSwap = colume[arry1];
                            colume[arry1] = colume[arry1 + 1];
                            colume[arry1 + 1] = tempSwap;
                        }
                    break;//退出计算
                }
                else if (colume == '-')//如果是-
                {
                    tempNumber = colume[i - 1] - colume[i + 1];
                    colume[i - 1] = tempNumber;
                    colume = '\0';
                    colume[i + 1] = '\0';


                    //将剩下的数向前移2位
                    int num1 = 0, arry1 = 0; int  tempSwap = 0;
                    for (num1 = 0; num1 < 2; num1++)
                        for (arry1 = i; arry1 < 14 - 1; arry1++)
                        {
                            tempSwap = colume[arry1];
                            colume[arry1] = colume[arry1 + 1];
                            colume[arry1 + 1] = tempSwap;
                        }
                    break;//退出计算
                }
            }
        //检查是否还有*/
        for (int checksym = 1; checksym < 13; checksym+=2)
        {
            if (colume[checksym] == '+' || colume[checksym] == '-')
            {
                panduan2 = true;
                break;
            }
        }
    } while (panduan2 == true);   
    return colume[0];
}



c123.jpg



而用python,只需要寥寥数行代码:


num =['6','0','7','0','11','0','3','0','2','0','5','0','12']
sym=['+','-','*','/']
for i in sym:
    for j in sym:
        for k in sym:
            for l in sym:
               for m in sym:
                   for n in sym:
                       num[11]=n
                       num[9]=m
                       num[7]=l
                       num[5]=k
                       num[3]=j
                       num[1]=i
                       strSplit=''.join(num)
                       if(eval(strSplit)==9):
                           print(strSplit + '=9')
py123.jpg

看来,处理数据,解决一些问题,python这小子名不虚传,方便啊……

免费评分

参与人数 3吾爱币 +1 热心值 +3 收起 理由
我是老周 + 1 搞这些没意思~~全是cmd窗口
Donghui891227 + 1 我很赞同!
olhoscn + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

aazsjcl 发表于 2020-10-10 12:35
[JavaScript] 纯文本查看 复制代码
j = 1
while j <= 9:
    i = 1
    while i <= j:
        print(f'{i} * {j} = {i*j}', end='\t')
        i += 1
    print()
    j += 1
 楼主| 无闻无问 发表于 2020-10-12 16:44
liphily 发表于 2020-10-12 15:59
python全靠import
c语言只是没那么多的.h给你include
搞大事还得c语言

肯定吹得凶,一是可卖模块,二是像易语言一样见效快…

免费评分

参与人数 1热心值 +1 收起 理由
liphily + 1 我很赞同!

查看全部评分

olhoscn 发表于 2020-10-10 12:15
火绒 发表于 2020-10-10 12:19
py yes!
7666345 发表于 2020-10-10 12:23
学习了,楼主厉害!!
jidesheng6 发表于 2020-10-10 12:33
python是高级的不能再高级的语言了,c语言是低级语言,很多方法都没有的,都是要自己写,所以才麻烦
lilips 发表于 2020-10-10 13:04
找工作还是JAVA,PHP之流,PYTHON做为辅助工具写点小程序非常优秀
haoxuer 发表于 2020-10-10 13:10
感谢楼主分享源码,学习了
Tiana丶Tiana 发表于 2020-10-10 13:31
感觉学会python 转其他语言就比较吃力了
layuai 发表于 2020-10-10 13:33
看你写的+-*/就知道是新手
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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