1.320行的弱智代码,想着写都写了,改到满分再说,没想到真垃圾。不过理解是肯定好理解。就是暴力
#include<stdio.h>
#include<stdlib.h>
int atoint(char c)
{
return c-'0';
}
int main()
{
int n,i,num,j,num1;
char c;
char str[8];
scanf("%d",&n);
scanf("%c",&c);
int fruit[n];
for(i=0;i<n;i++)
{
for(j=0;j<8;j++)
{
scanf("%c",&str[j]);
}
if(str[1]=='x')
{
num=atoint(str[0])*atoint(str[2]);
if(str[3]=='x')
{
num=num*atoint(str[4]);
if(str[5]=='x')
num=num*atoint(str[6]);
else if(str[5]=='/')
num=num/atoint(str[6]);
else if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[3]=='/')
{
num=num/atoint(str[4]);
if(str[5]=='x')
num=num*atoint(str[6]);
else if(str[5]=='/')
num=num/atoint(str[6]);
else if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[3]!='/'&&str[3]!='x'){
if(str[5]=='x')
{
num1=atoint(str[4])*atoint(str[6]);
if(str[3]=='+')
num=num+num1;
else if(str[3]=='-')
num=num-num1;
}else if(str[5]=='/')
{
num1=atoint(str[4])/atoint(str[6]);
if(str[3]=='+')
num=num+num1;
else if(str[3]=='-')
num=num-num1;
}else if(str[5]!='/'&&str[5]!='x')
{
if(str[3]=='+')
{
num=num+atoint(str[4]);
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[3]=='-')
{
num=num-atoint(str[4]);
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}
}
}
}
else if(str[1]=='/')
{
num=atoint(str[0])/atoint(str[2]);
if(str[3]=='x')
{
num=num*atoint(str[4]);
if(str[5]=='x')
num=num*atoint(str[6]);
else if(str[5]=='/')
num=num/atoint(str[6]);
else if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[3]=='/')
{
num=num/atoint(str[4]);
if(str[5]=='x')
num=num*atoint(str[6]);
else if(str[5]=='/')
num=num/atoint(str[6]);
else if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[3]!='/'&&str[3]!='x'){
if(str[5]=='x')
{
num1=atoint(str[4])*atoint(str[6]);
if(str[3]=='+')
num=num+num1;
else if(str[3]=='-')
num=num-num1;
}else if(str[5]=='/')
{
num1=atoint(str[4])/atoint(str[6]);
if(str[3]=='+')
num=num+num1;
else if(str[3]=='-')
num=num-num1;
}else if(str[5]!='/'&&str[5]!='x'){
if(str[3]=='+')
{
num=num+atoint(str[4]);
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[3]=='-')
{
num=num-atoint(str[4]);
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}
}
}
}
else if(str[1]!='x'&&str[1]!='/'){
if(str[3]=='x')
{
num=atoint(str[2])*atoint(str[4]);
if(str[5]=='x')
{
num=num*atoint(str[6]);
if(str[1]=='+')
num=atoint(str[0])+num;
else if(str[1]=='-')
num=atoint(str[0])-num;
}
else if(str[5]=='/')
{
num=num/atoint(str[6]);
if(str[1]=='+')
num=atoint(str[0])+num;
else if(str[1]=='-')
num=atoint(str[0])-num;
}
else if(str[5]!='/'&&str[5]!='x'){
if(str[1]=='+')
{
num=atoint(str[0])+num;
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[1]=='-')
{
num=atoint(str[0])-num;
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}
}
}
else if(str[3]=='/')
{
num=atoint(str[2])/atoint(str[4]);
if(str[5]=='x')
{
num=num*atoint(str[6]);
if(str[1]=='+')
num=num+atoint(str[0]);
else if(str[1]=='-')
num=atoint(str[0])-num;
}
else if(str[5]=='/')
{
num=num/atoint(str[6]);
if(str[1]=='+')
num=num+atoint(str[0]);
else if(str[1]=='-')
num=atoint(str[0])-num;
}
else if(str[5]!='/'&&str[5]!='x'){
if(str[1]=='+')
{
num=atoint(str[0])+num;
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[1]=='-')
{
num=atoint(str[0])-num;
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}
}
}
else if(str[3]!='x'&&str[3]!='/'){
if(str[5]=='x')
{
num=atoint(str[4])*atoint(str[6]);
if(str[1]=='+')
{
num1=atoint(str[0])+atoint(str[2]);
if(str[3]=='+')
num=num+num1;
else if (str[3]=='-')
num=num1-num;
}else if(str[1]=='-')
{
num1=atoint(str[0])-atoint(str[2]);
if(str[3]=='+')
num=num+num1;
else if (str[3]=='-')
num=num1-num;
}
}
else if(str[5]=='/')
{
num=atoint(str[4])/atoint(str[6]);
if(str[1]=='+')
{
num1=atoint(str[0])+atoint(str[2]);
if(str[3]=='+')
num=num+num1;
else if(str[3]=='-')
num=num1-num;
}else if(str[1]=='-')
{
num1=atoint(str[0])-atoint(str[2]);
if(str[3]=='+')
num=num+num1;
else if(str[3]=='-')
num=num1-num;
}
}
else if(str[5]!='x'&&str[5]!='/'){
if(str[1]=='+')
{
num=atoint(str[0])+atoint(str[2]);
if(str[3]=='+')
{
num=num+atoint(str[4]);
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[3]=='-')
{
num=num-atoint(str[4]);
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}
}else if(str[1]=='-'){
num=atoint(str[0])-atoint(str[2]);
if(str[3]=='+')
{
num=num+atoint(str[4]);
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}else if(str[3]=='-')
{
num=num-atoint(str[4]);
if(str[5]=='+')
num=num+atoint(str[6]);
else if(str[5]=='-')
num=num-atoint(str[6]);
}
}
}
}
}
fruit[i]=num;
}
for(i=0;i<n;i++)
{
if(i!=n-1)
{
if(fruit[i]==24)
printf("Yes\n");
else
printf("No\n");
}else
{
if(fruit[i]==24)
printf("Yes");
else
printf("No");
}
}
return 0;
}
2.还是用栈才是正确的做法。
注意如下:
(1)c语言读入字符时,用scanf("%c",&c);把空格给读掉
(2)若是数字则直接放入数字栈中;①若是“+”则直接把“+”入符号栈;②若是“-”则把“-"改变为”+“入符号栈,并且把其后面的数字添加负号存入数字栈中;③若是”x”或者“/”则直接就计算起来,并把结果存入数字栈。注意:②③中操作结束后紧接着就j++,因为后面的数字已经被用了。①②③整体结束后j++是为了整体往后走。
(3)最后符号栈内的加法做完即可。
#include<stdio.h>
#include<stdlib.h>
int atoint(char c)
{
return c-'0';
}
int main()
{
int n,i,lnum,j,rnum;
char c;
char str[8];
scanf("%d",&n);
scanf("%c",&c);
int fruit[n];
int stack1[4];
char stack2[3];
int top1=-1;
int top2=-1;
for(i=0;i<n;i++)
{
for(j=0;j<8;j++)
{
scanf("%c",&str[j]);
}
j=0;
top1=-1;
top2=-1;
while(j<7)
{
if((atoint(str[j])>=0)&&(atoint(str[j])<=9))
stack1[++top1]=atoint(str[j]);
else{
if(str[j]=='+')
stack2[++top2]=str[j];
else if(str[j]=='-')
{
stack1[++top1]=atoint(str[j+1])*(-1);
stack2[++top2]='+';
j++;
}
else if(str[j]=='x'){
lnum=stack1[top1--];
rnum=atoint(str[j+1]);
stack1[++top1]=lnum*rnum;
j++;
}else if(str[j]=='/'){
lnum=stack1[top1--];
rnum=atoint(str[j+1]);
stack1[++top1]=lnum/rnum;
j++;
}
}
j++;
}
while(top2!=-1)
{
rnum=stack1[top1--];
lnum=stack1[top1--];
stack1[++top1]=lnum+rnum;
top2--;
}
fruit[i]=stack1[0];
}
for(i=0;i<n;i++)
{
if(i!=n-1)
{
if(fruit[i]==24)
printf("Yes\n");
else
printf("No\n");
}else
{
if(fruit[i]==24)
printf("Yes");
else
printf("No");
}
}
return 0;
}