问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

计算器的改良(NOIP2000) 是DEV C++ 4.9.9.2

发布网友 发布时间:2022-04-24 05:23

我来回答

1个回答

热心网友 时间:2023-10-31 13:23

我自己写了一个,很好理解,但是输入输出是我自己写的,你可以改成文件

#include<iostream>
#include<iomanip>
using namespace std;

void fun(char* str){
char uknum;
for(int i=0; i<(int)strlen(str); i++)
if(str[i]>='a' &&str[i]<='z'){
uknum = str[i];
break;
}
int equalpos=0;
for(int i=0; i<(int)strlen(str); i++)
if(str[i]=='=') equalpos = i;

int co = 0;
for(int i=0; i<(int)strlen(str); i++){ //处理未知数项
int tmpco = 0;
if(str[i]>='a' &&str[i]<='z'){
if(i<equalpos){
if(i==0 || str[i-1]=='+')tmpco=1;
else{
if(str[i-1] == '-')tmpco=-1;
else{
char* tmp = str+i-1;
while(*tmp != '+' && *tmp != '-' && tmp > str)tmp--;
if(*tmp == '-'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
tmpco = 0-tmpco;
}else{
if(*tmp == '+'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
}else{
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
}
}
}
}

}
else{
if(str[i-1]=='+' || str[i-1]=='=')tmpco=-1;
else{
if(str[i-1] == '-')tmpco=1;
else{
char* tmp = str+i-1;
while(*tmp != '+' && *tmp != '-' && *tmp != '=')tmp--;
if(*tmp == '-'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
}else{
if(*tmp == '+'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
tmpco = 0 - tmpco;
}else{
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
tmpco = 0 - tmpco;
}
}
}
}

}
}
co+=tmpco;
}
int coint = 0;
for(int i=0; i<(int)strlen(str); i++){ //处理其余项
int tmpcoint = 0;
if(str[i]>='0' && str[i]<='9'){
if(i<equalpos){
char* tmpint = str+i;
while(*tmpint>='0'&&*tmpint<='9'){
tmpcoint = tmpcoint*10 + *tmpint-48;
tmpint++;
}
if(*tmpint==uknum){
i = tmpint-str;
continue;
}
else{
if(i==0 ||str[i-1]=='+'){coint-=tmpcoint;i = tmpint -str;}
else{
coint +=tmpcoint;
i = tmpint -str;
}
}
}
else{
char* tmpint = str+i;
while(*tmpint>='0'&&*tmpint<='9'){
tmpcoint = tmpcoint*10 + *tmpint-48;
tmpint++;
}
if(*tmpint==uknum){
i = tmpint-str;
continue;
}
else{
if(str[i-1]=='=' ||str[i-1]=='+'){coint+=tmpcoint;i=tmpint-str;}
else{
coint -=tmpcoint;
i = tmpint - str;
}
}

}
}
}
cout<<uknum<<" = "<<fixed<<setprecision(3)<<double(coint)/double(co)<<endl;

}
int main(){
char* str = "4+3x=8";
fun(str);
return 0;
}追问有点复杂,可以说算法么

追答不是复杂,有点多。。比如说吧6a-5+1=2-2a
第一个for循环是找未知数的,这里是a,我程序里用uknum,然后计算未知数系数,把含有a的项移到等式左边,系数存在co里
第二个for循环是计算剩余值,移到等式右边,存在coint里
最后用coint/co计算未知数的值

热心网友 时间:2023-10-31 13:23

我自己写了一个,很好理解,但是输入输出是我自己写的,你可以改成文件

#include<iostream>
#include<iomanip>
using namespace std;

void fun(char* str){
char uknum;
for(int i=0; i<(int)strlen(str); i++)
if(str[i]>='a' &&str[i]<='z'){
uknum = str[i];
break;
}
int equalpos=0;
for(int i=0; i<(int)strlen(str); i++)
if(str[i]=='=') equalpos = i;

int co = 0;
for(int i=0; i<(int)strlen(str); i++){ //处理未知数项
int tmpco = 0;
if(str[i]>='a' &&str[i]<='z'){
if(i<equalpos){
if(i==0 || str[i-1]=='+')tmpco=1;
else{
if(str[i-1] == '-')tmpco=-1;
else{
char* tmp = str+i-1;
while(*tmp != '+' && *tmp != '-' && tmp > str)tmp--;
if(*tmp == '-'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
tmpco = 0-tmpco;
}else{
if(*tmp == '+'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
}else{
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
}
}
}
}

}
else{
if(str[i-1]=='+' || str[i-1]=='=')tmpco=-1;
else{
if(str[i-1] == '-')tmpco=1;
else{
char* tmp = str+i-1;
while(*tmp != '+' && *tmp != '-' && *tmp != '=')tmp--;
if(*tmp == '-'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
}else{
if(*tmp == '+'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
tmpco = 0 - tmpco;
}else{
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
tmpco = 0 - tmpco;
}
}
}
}

}
}
co+=tmpco;
}
int coint = 0;
for(int i=0; i<(int)strlen(str); i++){ //处理其余项
int tmpcoint = 0;
if(str[i]>='0' && str[i]<='9'){
if(i<equalpos){
char* tmpint = str+i;
while(*tmpint>='0'&&*tmpint<='9'){
tmpcoint = tmpcoint*10 + *tmpint-48;
tmpint++;
}
if(*tmpint==uknum){
i = tmpint-str;
continue;
}
else{
if(i==0 ||str[i-1]=='+'){coint-=tmpcoint;i = tmpint -str;}
else{
coint +=tmpcoint;
i = tmpint -str;
}
}
}
else{
char* tmpint = str+i;
while(*tmpint>='0'&&*tmpint<='9'){
tmpcoint = tmpcoint*10 + *tmpint-48;
tmpint++;
}
if(*tmpint==uknum){
i = tmpint-str;
continue;
}
else{
if(str[i-1]=='=' ||str[i-1]=='+'){coint+=tmpcoint;i=tmpint-str;}
else{
coint -=tmpcoint;
i = tmpint - str;
}
}

}
}
}
cout<<uknum<<" = "<<fixed<<setprecision(3)<<double(coint)/double(co)<<endl;

}
int main(){
char* str = "4+3x=8";
fun(str);
return 0;
}追问有点复杂,可以说算法么

追答不是复杂,有点多。。比如说吧6a-5+1=2-2a
第一个for循环是找未知数的,这里是a,我程序里用uknum,然后计算未知数系数,把含有a的项移到等式左边,系数存在co里
第二个for循环是计算剩余值,移到等式右边,存在coint里
最后用coint/co计算未知数的值

热心网友 时间:2023-10-31 13:23

我自己写了一个,很好理解,但是输入输出是我自己写的,你可以改成文件

#include<iostream>
#include<iomanip>
using namespace std;

void fun(char* str){
char uknum;
for(int i=0; i<(int)strlen(str); i++)
if(str[i]>='a' &&str[i]<='z'){
uknum = str[i];
break;
}
int equalpos=0;
for(int i=0; i<(int)strlen(str); i++)
if(str[i]=='=') equalpos = i;

int co = 0;
for(int i=0; i<(int)strlen(str); i++){ //处理未知数项
int tmpco = 0;
if(str[i]>='a' &&str[i]<='z'){
if(i<equalpos){
if(i==0 || str[i-1]=='+')tmpco=1;
else{
if(str[i-1] == '-')tmpco=-1;
else{
char* tmp = str+i-1;
while(*tmp != '+' && *tmp != '-' && tmp > str)tmp--;
if(*tmp == '-'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
tmpco = 0-tmpco;
}else{
if(*tmp == '+'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
}else{
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
}
}
}
}

}
else{
if(str[i-1]=='+' || str[i-1]=='=')tmpco=-1;
else{
if(str[i-1] == '-')tmpco=1;
else{
char* tmp = str+i-1;
while(*tmp != '+' && *tmp != '-' && *tmp != '=')tmp--;
if(*tmp == '-'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
}else{
if(*tmp == '+'){
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
tmpco = 0 - tmpco;
}else{
tmp++;
while(tmp < str+i){
tmpco = tmpco*10 + *tmp-48;
tmp++;
}
tmpco = 0 - tmpco;
}
}
}
}

}
}
co+=tmpco;
}
int coint = 0;
for(int i=0; i<(int)strlen(str); i++){ //处理其余项
int tmpcoint = 0;
if(str[i]>='0' && str[i]<='9'){
if(i<equalpos){
char* tmpint = str+i;
while(*tmpint>='0'&&*tmpint<='9'){
tmpcoint = tmpcoint*10 + *tmpint-48;
tmpint++;
}
if(*tmpint==uknum){
i = tmpint-str;
continue;
}
else{
if(i==0 ||str[i-1]=='+'){coint-=tmpcoint;i = tmpint -str;}
else{
coint +=tmpcoint;
i = tmpint -str;
}
}
}
else{
char* tmpint = str+i;
while(*tmpint>='0'&&*tmpint<='9'){
tmpcoint = tmpcoint*10 + *tmpint-48;
tmpint++;
}
if(*tmpint==uknum){
i = tmpint-str;
continue;
}
else{
if(str[i-1]=='=' ||str[i-1]=='+'){coint+=tmpcoint;i=tmpint-str;}
else{
coint -=tmpcoint;
i = tmpint - str;
}
}

}
}
}
cout<<uknum<<" = "<<fixed<<setprecision(3)<<double(coint)/double(co)<<endl;

}
int main(){
char* str = "4+3x=8";
fun(str);
return 0;
}追问有点复杂,可以说算法么

追答不是复杂,有点多。。比如说吧6a-5+1=2-2a
第一个for循环是找未知数的,这里是a,我程序里用uknum,然后计算未知数系数,把含有a的项移到等式左边,系数存在co里
第二个for循环是计算剩余值,移到等式右边,存在coint里
最后用coint/co计算未知数的值

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 C语言定时1.5秒函数怎么写 coint the eggs的中文意思 大家给个建议,身上汗味重怎么遮盖? 什么香水能掩盖身上烟味 一个人身上的味道衣服上带有怎么去掉? 香水可以掩盖掉人身上的狐臭味吗? 什么香水能遮住身上的葱花味和油味 身上都是女人的香水味,怎么去除 男人身上有股异味,用什么可以遮盖 身有异味的应该喷香水遮盖吗 男生身上汗味重,又不能随时喷香水要怎么遮盖? 女朋友嫌弃我身上有味道,怎么才能有香味不被嫌弃? 请问一下,怎么遮盖身上的汗味,衣服如何才能变香? 谁知道,怎么遮盖身上的汗味? 个人独资企业能开“基本帐户”吗 个人独资企业有哪些特点 什么是个人独资企业,它有哪些基本特征? 光纤可以弯曲吗?会有光损吗? 请教~能使头发蓬松的产品有哪些?什么牌子比较好用? 蓬松喷雾对头发有伤害吗 我想知道八皇后问题的空间和时间复杂度,以及计算过程,谢谢 “天下没有不散的宴席”用英语怎么翻译,另外提供一些比较常用的俗语翻译。! 谁能帮我翻下中文,谢谢~~ kao协整检验适合于哪种面板数据 阿尔卡特OT-800有几个版本啊?哪个版本好啊?都多少钱啊?这款手机好用吗?有什么缺点啊? 用eviews命令的形式 找数据或生成数据,求临界值 平稳性检验,单位根检验,斜整检检验 已知(DS)=2000H,(ES)=3000H,(CS)=4000H,(SS)=5000H,(BP)=2080H,COUNT=20H ps液化怎么使用!~~ 半角符号“#”“&”英文怎么读 Photoshop液化工具的操作步骤是什么? two teapoons of milk __than a cup of tea 填is less 还是 are less 为什么 ??? 急需啊 ps液化工具怎么用和ps液化教程:瘦脸和放大 eviews 怎么进行平稳性检验,协整检验,还有GRANGER因果检验,操作步骤?SPSS的可以么? PS教程-液化工具总是用不好?来一起学习液化工具的使用技巧 coint the new books monsterindex cointtest=(johansen=(iorder=2))中的ioder是什么意思 中频炉有磁辐射没? ps如何液化工具怎么调 PS教程 中频电炉对人有何害处