去括号问题(C++处理)

news2024/11/25 23:05:41

继http://t.csdn.cn/kIcUT后的文章

题目描述

当老师不容易,尤其是当小学的老师更难:现在的小朋友做作业喜欢滥用括号。
虽然不影响计算结果,但不够美观,容易出错,而且可读性差。但又不能一棒子打死,也许他们就是将来的“陈景润”呢!
为了减轻老师的工作,不至于他们工作到深夜,我们来写个程序把小朋友的作业做一下简单地处理,去掉那些多余的括号。
为了简化问题,所有式子里只存在小括号,运算符号包括+(加)、-(减)、*(乘)、/(除)、^(幂)。
注意:去掉多余的小括号不是指运算结果一样就可以。
比如:(1+2)^1 = 3。虽然把括号去掉1+2^1也等于3,但我们说这个括号不能去。
但如:1+(2+3) = 1+2+3只要是允许的,因为加法是满足交换律和结合律的。

输入格式

输入包括多组测试数据。
每组测试数据为一行算术表达式,只包括数字和运算符号,长度小于16。
输入以#行结束,该行不做处理。

输出格式

对应每组数据输入都有一行输出。
输出去掉多余的括号后的表达式。

样例输入

<span style="color:#333333"><span style="color:#333333">((((1))))+((((1))))
1
1+1+1+1
((1+2)+3)*4
(1+(2+3))*4
((1*2)*3)*4
(1*(2*3))*4
((1*2)*(3*4))
1*((2*3)*4)
1*(2*(3*4))
((1*2)*4)*3
(1*(2*4))*3
((1*2)*(4*3))
1*((2*4)*3)
1*(2*(4*3))
((1+3)+2)*4
(1+(3+2))*4
((1+3)*(2+4))
((1*3)*2)*4
(1*(3*2))*4
((1*3)*(2*4))
1*((3*2)*4)
1*(3*(2*4))
((1+3)*(4+2))
((1*3)*4)*2
(1*(3*4))*2
((1*3)*(4*2))
1*((3*4)*2)
1*(3*(4*2))
((1*4)*3)*2
(1*(4*3))*2
((1*4)*(3*2))
1*((4*3)*2)
1*(4*(3*2))
((1*4)*2)*3
(1*(4*2))*3
((1*4)*(2*3))
1*((4*2)*3)
1*(4*(2*3))
((2+1)+3)*4
(2+(1+3))*4
((2*1)*3)*4
(2*(1*3))*4
((2*1)*(3*4))
2*((1*3)*4)
2*(1*(3*4))
((2/1)*3)*4
((2/1)*(3*4))
(2/(1/3))*4
2/(1/(3*4))
2/((1/3)/4)
((2^1)*3)*4
((2^1)*(3*4))
((2*1)*4)*3
(2*(1*4))*3
((2*1)*(4*3))
2*((1*4)*3)
2*(1*(4*3))
((2/1)*4)*3
((2/1)*(4*3))
(2/(1/4))*3
2/(1/(4*3))
2/((1/4)/3)
((2^1)*4)*3
((2^1)*(4*3))
((2+3)+1)*4
(2+(3+1))*4
((2*3)*1)*4
(2*(3*1))*4
((2*3)*(1*4))
2*((3*1)*4)
2*(3*(1*4))
((2*3)/1)*4
(2*(3/1))*4
2*((3/1)*4)
((2*3)/(1/4))
2*(3/(1/4))
((2*3)^1)*4
(2*(3^1))*4
2*((3^1)*4)
((2*3)*4)*1
(2*(3*4))*1
((2*3)*(4*1))
2*((3*4)*1)
2*(3*(4*1))
((2*3)*4)/1
(2*(3*4))/1
((2*3)*(4/1))
2*((3*4)/1)
2*(3*(4/1))
((2*3)*4)^1
(2*(3*4))^1
((2*3)*(4^1))
2*((3*4)^1)
2*(3*(4^1))
((2^3)*(4-1))
((2+4)*(3+1))
((2*4)*3)*1
(2*(4*3))*1
((2*4)*(3*1))
2*((4*3)*1)
2*(4*(3*1))
((2*4)*3)/1
(2*(4*3))/1
((2*4)*(3/1))
2*((4*3)/1)
2*(4*(3/1))
((2*4)*3)^1
(2*(4*3))^1
((2*4)*(3^1))
2*((4*3)^1)
2*(4*(3^1))
((2+4)*(1+3))
((2*4)*1)*3
(2*(4*1))*3
((2*4)*(1*3))
2*((4*1)*3)
2*(4*(1*3))
((2*4)/1)*3
(2*(4/1))*3
2*((4/1)*3)
((2*4)/(1/3))
2*(4/(1/3))
((2*4)^1)*3
(2*(4^1))*3
2*((4^1)*3)
(2^(4-1))*3
((3+2)+1)*4
(3+(2+1))*4
((3*2)*1)*4
(3*(2*1))*4
((3*2)*(1*4))
3*((2*1)*4)
3*(2*(1*4))
((3*2)/1)*4
(3*(2/1))*4
3*((2/1)*4)
((3*2)/(1/4))
3*(2/(1/4))
((3*2)^1)*4
(3*(2^1))*4
3*((2^1)*4)
3/(2^(1-4))
((3*2)*4)*1
(3*(2*4))*1
((3*2)*(4*1))
3*((2*4)*1)
3*(2*(4*1))
((3*2)*4)/1
(3*(2*4))/1
((3*2)*(4/1))
3*((2*4)/1)
3*(2*(4/1))
((3*2)*4)^1
(3*(2*4))^1
((3*2)*(4^1))
3*((2*4)^1)
3*(2*(4^1))
3*(2^(4-1))
((3+1)+2)*4
(3+(1+2))*4
((3+1)*(2+4))
((3*1)*2)*4
(3*(1*2))*4
((3*1)*(2*4))
3*((1*2)*4)
3*(1*(2*4))
((3/1)*2)*4
((3/1)*(2*4))
(3/(1/2))*4
3/(1/(2*4))
3/((1/2)/4)
((3^1)*2)*4
((3^1)*(2*4))
((3+1)*(4+2))
((3*1)*4)*2
(3*(1*4))*2
((3*1)*(4*2))
3*((1*4)*2)
3*(1*(4*2))
((3/1)*4)*2
((3/1)*(4*2))
(3/(1/4))*2
3/(1/(4*2))
3/((1/4)/2)
((3^1)*4)*2
((3^1)*(4*2))
((3*4)*1)*2
(3*(4*1))*2
((3*4)*(1*2))
3*((4*1)*2)
3*(4*(1*2))
((3*4)/1)*2
(3*(4/1))*2
3*((4/1)*2)
((3*4)/(1/2))
3*(4/(1/2))
((3*4)^1)*2
(3*(4^1))*2
3*((4^1)*2)
((3*4)*2)*1
(3*(4*2))*1
((3*4)*(2*1))
3*((4*2)*1)
3*(4*(2*1))
((3*4)*2)/1
(3*(4*2))/1
((3*4)*(2/1))
3*((4*2)/1)
3*(4*(2/1))
((3*4)*2)^1
(3*(4*2))^1
((3*4)*(2^1))
3*((4*2)^1)
3*(4*(2^1))
((4+2)*(3+1))
4*((2+3)+1)
4*(2+(3+1))
((4*2)*3)*1
(4*(2*3))*1
((4*2)*(3*1))
4*((2*3)*1)
4*(2*(3*1))
((4*2)*3)/1
(4*(2*3))/1
((4*2)*(3/1))
4*((2*3)/1)
4*(2*(3/1))
((4*2)*3)^1
(4*(2*3))^1
((4*2)*(3^1))
4*((2*3)^1)
4*(2*(3^1))
((4+2)*(1+3))
4*((2+1)+3)
4*(2+(1+3))
((4*2)*1)*3
(4*(2*1))*3
((4*2)*(1*3))
4*((2*1)*3)
4*(2*(1*3))
((4*2)/1)*3
(4*(2/1))*3
4*((2/1)*3)
((4*2)/(1/3))
4*(2/(1/3))
((4*2)^1)*3
(4*(2^1))*3
4*((2^1)*3)
4*((3+2)+1)
4*(3+(2+1))
((4*3)*2)*1
(4*(3*2))*1
((4*3)*(2*1))
4*((3*2)*1)
4*(3*(2*1))
((4*3)*2)/1
(4*(3*2))/1
((4*3)*(2/1))
4*((3*2)/1)
4*(3*(2/1))
((4*3)*2)^1
(4*(3*2))^1
((4*3)*(2^1))
4*((3*2)^1)
4*(3*(2^1))
4*((3+1)+2)
4*(3+(1+2))
((4*3)*1)*2
(4*(3*1))*2
((4*3)*(1*2))
4*((3*1)*2)
4*(3*(1*2))
((4*3)/1)*2
(4*(3/1))*2
4*((3/1)*2)
((4*3)/(1/2))
4*(3/(1/2))
((4*3)^1)*2
(4*(3^1))*2
4*((3^1)*2)
4*((1+3)+2)
4*(1+(3+2))
((4*1)*3)*2
(4*(1*3))*2
((4*1)*(3*2))
4*((1*3)*2)
4*(1*(3*2))
((4/1)*3)*2
((4/1)*(3*2))
(4/(1/3))*2
4/(1/(3*2))
4/((1/3)/2)
((4^1)*3)*2
((4^1)*(3*2))
((4-1)*(2^3))
4*((1+2)+3)
4*(1+(2+3))
((4*1)*2)*3
(4*(1*2))*3
((4*1)*(2*3))
4*((1*2)*3)
4*(1*(2*3))
((4/1)*2)*3
((4/1)*(2*3))
(4/(1/2))*3
4/(1/(2*3))
4/((1/2)/3)
((4^1)*2)*3
((4^1)*(2*3))
#
</span></span>

样例输出

<span style="color:#333333"><span style="color:#333333">1+1
1
1+1+1+1
(1+2+3)*4
(1+2+3)*4
1*2*3*4
1*2*3*4
1*2*3*4
1*2*3*4
1*2*3*4
1*2*4*3
1*2*4*3
1*2*4*3
1*2*4*3
1*2*4*3
(1+3+2)*4
(1+3+2)*4
(1+3)*(2+4)
1*3*2*4
1*3*2*4
1*3*2*4
1*3*2*4
1*3*2*4
(1+3)*(4+2)
1*3*4*2
1*3*4*2
1*3*4*2
1*3*4*2
1*3*4*2
1*4*3*2
1*4*3*2
1*4*3*2
1*4*3*2
1*4*3*2
1*4*2*3
1*4*2*3
1*4*2*3
1*4*2*3
1*4*2*3
(2+1+3)*4
(2+1+3)*4
2*1*3*4
2*1*3*4
2*1*3*4
2*1*3*4
2*1*3*4
2/1*3*4
2/1*3*4
2/(1/3)*4
2/(1/(3*4))
2/(1/3/4)
2^1*3*4
2^1*3*4
2*1*4*3
2*1*4*3
2*1*4*3
2*1*4*3
2*1*4*3
2/1*4*3
2/1*4*3
2/(1/4)*3
2/(1/(4*3))
2/(1/4/3)
2^1*4*3
2^1*4*3
(2+3+1)*4
(2+3+1)*4
2*3*1*4
2*3*1*4
2*3*1*4
2*3*1*4
2*3*1*4
2*3/1*4
2*3/1*4
2*3/1*4
2*3/(1/4)
2*3/(1/4)
(2*3)^1*4
2*3^1*4
2*3^1*4
2*3*4*1
2*3*4*1
2*3*4*1
2*3*4*1
2*3*4*1
2*3*4/1
2*3*4/1
2*3*4/1
2*3*4/1
2*3*4/1
(2*3*4)^1
(2*3*4)^1
2*3*4^1
2*(3*4)^1
2*3*4^1
2^3*(4-1)
(2+4)*(3+1)
2*4*3*1
2*4*3*1
2*4*3*1
2*4*3*1
2*4*3*1
2*4*3/1
2*4*3/1
2*4*3/1
2*4*3/1
2*4*3/1
(2*4*3)^1
(2*4*3)^1
2*4*3^1
2*(4*3)^1
2*4*3^1
(2+4)*(1+3)
2*4*1*3
2*4*1*3
2*4*1*3
2*4*1*3
2*4*1*3
2*4/1*3
2*4/1*3
2*4/1*3
2*4/(1/3)
2*4/(1/3)
(2*4)^1*3
2*4^1*3
2*4^1*3
2^(4-1)*3
(3+2+1)*4
(3+2+1)*4
3*2*1*4
3*2*1*4
3*2*1*4
3*2*1*4
3*2*1*4
3*2/1*4
3*2/1*4
3*2/1*4
3*2/(1/4)
3*2/(1/4)
(3*2)^1*4
3*2^1*4
3*2^1*4
3/2^(1-4)
3*2*4*1
3*2*4*1
3*2*4*1
3*2*4*1
3*2*4*1
3*2*4/1
3*2*4/1
3*2*4/1
3*2*4/1
3*2*4/1
(3*2*4)^1
(3*2*4)^1
3*2*4^1
3*(2*4)^1
3*2*4^1
3*2^(4-1)
(3+1+2)*4
(3+1+2)*4
(3+1)*(2+4)
3*1*2*4
3*1*2*4
3*1*2*4
3*1*2*4
3*1*2*4
3/1*2*4
3/1*2*4
3/(1/2)*4
3/(1/(2*4))
3/(1/2/4)
3^1*2*4
3^1*2*4
(3+1)*(4+2)
3*1*4*2
3*1*4*2
3*1*4*2
3*1*4*2
3*1*4*2
3/1*4*2
3/1*4*2
3/(1/4)*2
3/(1/(4*2))
3/(1/4/2)
3^1*4*2
3^1*4*2
3*4*1*2
3*4*1*2
3*4*1*2
3*4*1*2
3*4*1*2
3*4/1*2
3*4/1*2
3*4/1*2
3*4/(1/2)
3*4/(1/2)
(3*4)^1*2
3*4^1*2
3*4^1*2
3*4*2*1
3*4*2*1
3*4*2*1
3*4*2*1
3*4*2*1
3*4*2/1
3*4*2/1
3*4*2/1
3*4*2/1
3*4*2/1
(3*4*2)^1
(3*4*2)^1
3*4*2^1
3*(4*2)^1
3*4*2^1
(4+2)*(3+1)
4*(2+3+1)
4*(2+3+1)
4*2*3*1
4*2*3*1
4*2*3*1
4*2*3*1
4*2*3*1
4*2*3/1
4*2*3/1
4*2*3/1
4*2*3/1
4*2*3/1
(4*2*3)^1
(4*2*3)^1
4*2*3^1
4*(2*3)^1
4*2*3^1
(4+2)*(1+3)
4*(2+1+3)
4*(2+1+3)
4*2*1*3
4*2*1*3
4*2*1*3
4*2*1*3
4*2*1*3
4*2/1*3
4*2/1*3
4*2/1*3
4*2/(1/3)
4*2/(1/3)
(4*2)^1*3
4*2^1*3
4*2^1*3
4*(3+2+1)
4*(3+2+1)
4*3*2*1
4*3*2*1
4*3*2*1
4*3*2*1
4*3*2*1
4*3*2/1
4*3*2/1
4*3*2/1
4*3*2/1
4*3*2/1
(4*3*2)^1
(4*3*2)^1
4*3*2^1
4*(3*2)^1
4*3*2^1
4*(3+1+2)
4*(3+1+2)
4*3*1*2
4*3*1*2
4*3*1*2
4*3*1*2
4*3*1*2
4*3/1*2
4*3/1*2
4*3/1*2
4*3/(1/2)
4*3/(1/2)
(4*3)^1*2
4*3^1*2
4*3^1*2
4*(1+3+2)
4*(1+3+2)
4*1*3*2
4*1*3*2
4*1*3*2
4*1*3*2
4*1*3*2
4/1*3*2
4/1*3*2
4/(1/3)*2
4/(1/(3*2))
4/(1/3/2)
4^1*3*2
4^1*3*2
(4-1)*2^3
4*(1+2+3)
4*(1+2+3)
4*1*2*3
4*1*2*3
4*1*2*3
4*1*2*3
4*1*2*3
4/1*2*3
4/1*2*3
4/(1/2)*3
4/(1/(2*3))
4/(1/2/3)
4^1*2*3
4^1*2*3</span></span>

 对于这类输出结果较多的题目,我在网上学习到一种方法,可以通过cmd命令,比较结果和正确答案,具体步骤如下

1.打开一个名为"1.txt"的文件,并将结果写入该文件。在循环中,将结果写入文件。

使用is_open函数来检查文件是否成功打开,使用cerr流输出错误信息

#include <iostream>
#include <fstream>

int main() {
    std::ofstream mycout("文件地址/1.txt");
    if (mycout.is_open()) {
        // 文件打开成功,执行写入操作
        while (多组数据) {
            mycout << 你的结果;
        }
        mycout << std::endl;
    } else {
        // 文件打开失败,输出错误信息
        std::cerr << "无法打开文件" << std::endl;
    }
    return 0;
}

也可以直接抛异常

#include <iostream>
#include <fstream>
#include <stdexcept>

int main() {
    std::ofstream mycout("文件地址/1.txt");
    if (mycout.is_open()) {
        // 文件打开成功,执行写入操作
        while (多组数据) {
            mycout << 你的结果;
        }
        mycout << std::endl;
    } else {
        // 文件打开失败,抛出异常
        throw std::runtime_error("无法打开文件");
    }
    return 0;
}

2.将样例放入另一个文件中,用win+R,输入cmd命令

fc 文件1 文件2

3. 比较两个文件

如果有错误则显示:

 如果无错误则显示:

 接下来是解题思路

设置优先级

level['^']=6; level['/']=4; level['*']=3; level['-']=2; level['+']=1;

 注:

●这里“-”的优先级要比“+”大

例如:

a+(b+c)可以去括号,但是a-(b+c)去括号后,括号的“+”要变“-”,如果不变答案将不同

●这里的“/”的优先级要比“*”大

例如:

a * (b * c)可以去括号,(a*b)/c去括号也不会影响结果,因为式子本来就是从左至右进行运算的,但是a/(b * c)去括号后结果可能不同

24/(3*2)=4

而从左至右计算 24/3*2=16

●level[^]为6,而不是5

这是因为a * (b * c)可以去括号,但存在一种特殊情况:a/(b/c)在程序中是可以去括号的,因为括号内外优先级一致,但实际上却不行,level[‘^’]之所以6是为了留出一个5来解决这个问题

去括号

我用一个bool tag[]数组,初始全true,判断一对括号应该除去时,两个位置都置false。

防止数组越界

为了防止数组越界,在分析过程中,只分析到倒数第二个字符,最后一个字符单独分析

代码如下:

●首先,设计一个栈,它用来存放左括号【的数组下标!】
●遍历这个式子(字符串),遇到左括号则入栈,遇到【右括号】:

        ●看看它的右边(右括号的右边),它可能是运算符,也可能又是一个右括号(但不会是数字)
        ●看看它对应的左括号(栈顶元素)的左边(括号前面),它可能是一个运算符,也可能左边越界了
        ●处理一下越界等特殊情况,你拿到了: 运算符1(式子)运算符2
这个时候需要精准判断,只有在括号中的式子的全部符号【优先级】都比两个运算符【大于等于】的情况下括号才能去掉

(普遍情况)
//只有在括号中的式子的全部符号【优先级】都比两个运算符【大于等于】的情况下括号才能去掉
//括号前面是"/",lev要++,使lev从’4‘到‘5’

(特殊情况)
//(a*b)/c这是要去括号的,因为式子本来就是从左到右进行运算,但是c/(a*b)会影响结果 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<stack>
#include<map>
using namespace std;
int main() {
    string c;
    stack<int> s;//定义一个栈
    map<char,int> level;
    while(cin>>c) {    
        level['^']=6;level['/']=4;level['*']=3;level['-']=2;level['+']=1;
        if(c=="#") break;
        int len = c.length();
        bool tag[len];
        memset(tag,true,sizeof(tag));
        for(int i=0; i<len-1; i++) {
            if(c[i]=='(') {
                s.push(i);
            } else if(c[i]==')') {
                bool ok = true;
                int lev1,lev2;  //括号后面
                lev1=lev2=0;  //初始化最小
                //lev1表示括号后面的运算符,lev2表示括号前面的运算符
                int back_chu = 0;
                int all_cheng = 1;
                if(c[i+1]!=')') { //右括号后边是运算符
                    lev1 = level[c[i+1]];  //括号后面
                    if(c[i+1]=='/') back_chu=1;
                }
                if(s.top()!=0) { //括号前面有运算符
                    lev2 = level[c[s.top()-1]]; //括号前面
                    if(c[s.top()-1]=='/') lev2++;
                }
                for(int j=s.top()+1; j<=i-1; j++) {//遍历括号里面的内容
                    if(!isdigit(c[j]) && c[j]!='(' && c[j]!=')') {//如果c[j]是运算符
                        if(c[j]!='*') all_cheng = 0;
                        if(level[c[j]]<lev1 || level[c[j]]<lev2) {
//只有在括号中的式子的全部符号【优先级】都比两个运算符【大于等于】的情况下括号才能去掉
                            ok = false;
                            if(lev2==6) level[c[j]]=6; //幂的情况 
                            break;
                        }
                    }
                }
                if(ok || (back_chu && all_cheng)) {
//(普遍情况)
//只有在括号中的式子的全部符号【优先级】都比两个运算符【大于等于】的情况下括号才能去掉
//括号前面是"/",lev要++
//普遍情况靠比较lev大小判断
//  或(||)
//(特殊情况)
//(a*b)/c这是要去括号的,但是c/(a*b)会影响结果
                    tag[i] = tag[s.top()] = false;
                }
                s.pop();
            }
        }
        if(c[len-1]==')' && c[s.top()]=='(') { //单独分析最后一个元素,他只可能是数字或者")",这里是")"
            if(s.top()==0) {
            //类似((a+b)* (b+c))
                tag[len-1] = tag[s.top()] = false;
            } else {//这里是数字,类似于4/(1/2)*3
                int lev3 = level[c[s.top()-1]];
                if(c[s.top()-1]=='/') lev3++;//类似a/(b/c)的特殊情况,上升为'5'
                bool ok = true;
                for(int j=s.top()+1; j<=len-2; j++) {//这是对括号里的内容进行遍历          //例如,4/(1/2)*3,3位置为len,"*"为len-1,")"为len-2
                    if(!isdigit(c[j]) && c[j]!='(' && c[j]!=')') {//和之前的处理相同
                        if(level[c[j]]<lev3) {
                            ok = false;
                            break;
                        }
                    }
                }
                if(ok) {
                    tag[len-1] = tag[s.top()] = false;//去括号
                }
            }
            s.pop();
        }
        for(int i=0; i<len; i++) {
            if(tag[i]) cout<<c[i];
        }
        cout<<endl;
    }
    return 0;
}

如果其中有什么漏洞,请大佬们不吝赐教💖💖💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux从入门到精通】进程的控制(进程退出+进程等待)

本篇文章主要讲述的是进程的退出和进程等待。希望本篇文章的内容会对你有所帮助。 文章目录 一、fork创建子进程 1、1 在创建子进程中操作系统的作用 1、2 写时拷贝 二、进程终止 2、1 常见的进程退出 2、2 进程的退出码 2、2、1 运行结果正确实例 2、2、2 运行结果不正确实例…

防御第二天-防火墙演示实验

1.上课思维导图 2.防火墙演示实验 防火墙FW1&#xff1a;原用户名&#xff1a;admin 原密码&#xff1a;Admin123 配地址&#xff1a;<USG6000V1>sy [USG6000V1]int g0/0/0 [USG6000V1-GigabitEthernet0/0/0]ip add 192.168.18.2 24 打开所有权限[USG6000V1-Gig…

C++(一):基本数据类型

基本数据类型 基本内置类型定义变量type field value;type field(value);type field{value};type field {value}; 数学常量及函数静态类型转换 static_cast格式化字符串std::stringstreamstd::string引入三方库 fmt/core.h 字符运算auto 关键字枚举类型数据类型定义别名判断是…

牛客网刷题之链表(一)

链表 NB1 删除链表峰值NB2 牛群排列去重NB3 调整牛群顺序NB4 牛群的重新分组NB5 牛群的重新排列NB6 合并两群能量值&#xff08;合并有序单链表&#xff09;NB7 牛群的能量值&#xff08;单链表相加&#xff09; 以下题全部出自牛客网。 题目题目考察的知识点链表&#xff1a; …

Element Plus 日期选择器

计算开始日期到结束日期的总天数 结构 <el-form-item label"计划开始时间" required prop"StartTime"><el-date-pickertype"date"v-model"ruleForm.StartTime":disabled-date"StartTime"placeholder"计划开始…

pytorch工具——使用pytorch构建一个分类器

目录 分类器任务和数据介绍训练分类器的步骤在GPU上训练模型 分类器任务和数据介绍 训练分类器的步骤 #1 import torch import torchvision import torchvision.transforms as transformstransformtransforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.…

SpringCloud学习路线(8)—— Docker

一、Docker的开始 &#xff08;一&#xff09;项目部署问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性问题开发、测试、生产环境有差异 &#xff08;二&#xff09;Docker如何解决问题&#xff1f; 1、依赖兼容问题 &#xff08;1&#xff09;将应用的Libs&…

垃圾回收之三色标记法(Tri-color Marking)

关于垃圾回收算法&#xff0c;基本就是那么几种&#xff1a;标记-清除、标记-复制、标记-整理。在此基础上可以增加分代&#xff08;新生代/老年代&#xff09;&#xff0c;每代采取不同的回收算法&#xff0c;以提高整体的分配和回收效率。 无论使用哪种算法&#xff0c;标记…

(已解决)RuntimeError: Java gateway process exited before sending its port number

今天用Pycharm远程使用pysaprk解释器时&#xff0c;跑代码出现了这个错误&#xff1a; RuntimeError: Java gateway process exited before sending its port number 找了好多博客都没解决问题&#xff0c;有说重装spark的&#xff0c;有说本地配Java_home的&#xff0c;后面我…

[C语言刷题]杨氏矩阵、返回型参数

本文包含知识点 杨氏矩阵极其解法函数return多个值的四种方法 题目&#xff1a; 杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于…

js 在浏览器窗口关闭后还可以不中断网络请求

有个需求&#xff0c;我们需要在用户发送数据过程中&#xff0c;如果用户关闭了网页(包括整个浏览器关闭)&#xff0c;不要中断数据传递 目前XMLHttpRequest对象是不支持的 http服务器 为了测试效果我们用nodejs写了个http服务器代码 文件名为httpServer.js如下&#xff0c;…

获取大疆无人机的飞控记录数据并绘制曲线

机型M350RTK&#xff0c;其飞行记录文件为加密的&#xff0c;我的完善代码如下 gitgithub.com:huashu996/DJFlightRecordParsing2TXT.git 一、下载安装官方的DJIFlightRecord git clone gitgithub.com:dji-sdk/FlightRecordParsingLib.git飞行记录文件在打开【我的电脑】&am…

Windows nvm 安装后webstrom vue项目编译报错,无法识别node

1 nvm安装流程 卸载原先nodejs用管理员权限打开exe安装nvmnvm文件夹和nodejs文件夹 都授权Authenticated Users 完全控制nvm list availablenvm install 16.20.1nvm use 16.20.1输入node和npm检查版本命令&#xff0c;正常显示确认系统变量和用户变量都有nvm 和nodejs 2 bug情…

数学建模-聚类算法 系统(层次)聚类

绝对值距离:网状道路 一般用组间和组内距离 聚类的距离计算如何选取&#xff1a;看结果是否解释的通&#xff0c;选择一种结果解释的通的方法。

【数据挖掘】将NLP技术引入到股市分析

一、说明 在交易中实施的机器学习模型通常根据历史股票价格和其他定量数据进行训练&#xff0c;以预测未来的股票价格。但是&#xff0c;自然语言处理&#xff08;NLP&#xff09;使我们能够分析财务文档&#xff0c;例如10-k表格&#xff0c;以预测股票走势。 二、对自然语言处…

【转载+修改】pytorch中backward求梯度方法的具体解析

原则上&#xff0c;pytorch不支持张量对张量的求导&#xff0c;它只支持标量对张量的求导 我们先看标量对张量求导的情况 import torch xtorch.ones(2,2,requires_gradTrue) print(x) print(x.grad_fn)输出&#xff0c;由于x是被直接创建的&#xff0c;也就是说它是一个叶子节…

Vue.js uni-app 混合模式原生App webview与H5的交互

在现代移动应用开发中&#xff0c;原生App与H5页面之间的交互已经成为一个常见的需求。本文将介绍如何在Vue.js框架中实现原生App与H5页面之间的数据传递和方法调用。我们将通过一个简单的示例来展示如何实现这一功能。附完整源码下载地址:https://ext.dcloud.net.cn/plugin?i…

Java集成openAi的ChatGPT实战

效果图&#xff1a; 免费体验地址&#xff1a;AI智能助手 具体实现 public class OpenAiUtils {private static final Log LOG LogFactory.getLog(OpenAiUtils.class);private static OpenAiProxyService openAiProxyService;public OpenAiUtils(OpenAiProxyService openAiP…

【C++】入门 --- 命名空间

文章目录 &#x1f36a;一、前言&#x1f369;1、C简介&#x1f369;2、C关键字 &#x1f36a;二、命名冲突&#x1f36a;三、命名空间&#x1f369;1、命名空间定义&#x1f369;2、命名空间的使用 &#x1f36a;四、C输入&输出 &#x1f36a;一、前言 本篇文章是《C 初阶…

Data Transfer Object-DTO,数据传输对象,前端参数设计多个数据表对象

涉及两张表的两个实体对象 用于在业务逻辑层和持久层&#xff08;数据库访问层&#xff09;之间传输数据。 DTO的主要目的是将多个实体&#xff08;Entity&#xff09;的部分属性或多个实体关联属性封装成一个对象&#xff0c;以便在业务层进行数据传输和处理&#xff0c;从而…