c语言求十万以内的幸运素数,C语言任务整理

#define eps 1e-8

char a[10], b[10], c[10], d[10],s[100];char operate[4] = {

'+','-','*','/'};int fin[1000];double dig[1000]; //数字栈

char ope[1000]; //运算符栈

int pri[1000]; //存储运算符优先级

int Create(char[], char[], char[], char[], char, char, char);int Calculate(char *);int getdig(int, int);double cal(double, double, char);int FullArray(int, int, int);void pop(void);doublemin;int flag,flagless = 0;intdigtop, opetop;intmain()

{inti, j, k;

pri['+'] = pri['-'] = 0;

pri['*'] = pri['/'] = 1;while(scanf("%s",a) !=EOF)

{

flag= flagless = 0;

min= 1000;

scanf("%s%s%s",b, c, d);

getchar();for (i = 0; i < 4; i++)

{if (flag == 1)break;for (j = 0; j < 4; j++)

{if (flag == 1)break;for (k = 0; k < 4; k++)

{if (FullArray(i,j,k) == 1)

{

printf("24.000\n");

flag= 1;break;

}

}

}

}if (flag == 0)

{if (flagless == 1)

printf("%.3f\n",24-min);elseprintf("%.3f\n",24+min);

}

}

}//构造由abcdijk组成的中缀表达式//入口参数:运算符//返回:中缀表达式是否构成了24点

int Create(char a[], char b[], char c[],char d[],char i, char j, chark)

{intl;for (l = 0; *(s+l) != '\0'; l++)*(s+l) = '\0';

strcpy(s,a);

s[strlen(s)]=i;

strcat(s,b);

s[strlen(s)]=j;

strcat(s,c);

s[strlen(s)]=k;

strcat(s,d);//printf("%s=",s);

if(Calculate(s) == 1)return 1;return 0;

}//计算s的值//入口参数:中缀表达式//返回:是否构成24点

int Calculate(char *s)

{

digtop= opetop = 0; //栈顶指针

int i, x, neg = 0; //neg == 1 负数

for (i = 0; *(s+i) != '\0'; i++)

{if (fin[i] == 0) //fin[i] = 1 表示第i位处理完毕

{if (s[i] >= '0' && s[i] <= '9') //数字直接入栈

{

x=getdig(i, neg);

neg= 0;

dig[++digtop] = (double)x;

}else{//两个符号相连,或者第一个字符是符号,证明遇到负数

if((i>0 && (!(s[i-1] >= '0' && s[i-1] <= '9')))||(i == 0))

neg= 1;else{if (opetop == 0) //运算符栈为空直接入栈

ope[++opetop] =s[i];else{while (pri[ope[opetop]] >= pri[s[i]] && opetop > 0)

pop();

ope[++opetop] =s[i];

}

}

}

}

}while (opetop > 0)

pop();if (fabs(dig[digtop]-24) < eps) //找到24点

return 1;if (fabs(dig[digtop]-24)

{

min= fabs(dig[digtop]-24);if (dig[digtop] < 24)

flagless= 1;elseflagless= 0;

}//printf("%.3f\n",dig[digtop]);

if (fabs(dig[digtop]-24) ==min)if (dig[digtop] < 24)

flagless= 1;for (i = 0; *(s+i) != '\0'; i++)

fin[i]= 0;return 0;

}//弹出两个元素运算//入口参数:无//返回:无

void pop(void)

{doublea, b;charc;

a= dig[digtop--];

b=dig[digtop];

c= ope[opetop--];

dig[digtop]=cal(a,b,c);

}//返回从第i位开始的数字//入口参数:数字的第一个字符在字符串s中的位置i//返回:数字

int getdig(int i, intneg)

{int x = s[i] - 48;

fin[i]= 1;while (1)

{

i++;if (i ==strlen(s))break;if (*(s+i) < '0' || *(s+i) > '9')break;

fin[i]= 1;

x*= 10;

x+= s[i] - 48;

}if (neg == 1)return x*(-1);returnx;

}//计算//入口参数:数 运算符//返回:结果

double cal(double x, double y, charc)

{switch(c)

{case '+':return x+y;case '-':return y-x;case '*':return x*y;case '/':if (x != 0)return y/x;

}return -100000;

}//全排列//入口参数:运算符//返回:构成24点返回1

int FullArray(int i, int j, intk)

{//a

if(Create(a,b,c,d,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(a,b,d,c,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(a,c,d,b,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(a,c,b,d,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(a,d,c,b,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(a,d,b,c,operate[i],operate[j],operate[k]) == 1) return 1;//b

if(Create(b,a,c,d,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(b,a,d,c,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(b,c,d,a,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(b,c,a,d,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(b,d,a,c,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(b,d,c,a,operate[i],operate[j],operate[k]) == 1) return 1;//c

if(Create(c,a,b,d,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(c,a,d,b,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(c,b,d,a,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(c,b,a,d,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(c,d,a,b,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(c,d,b,a,operate[i],operate[j],operate[k]) == 1) return 1;//d

if(Create(d,a,b,c,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(d,a,c,b,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(d,b,a,c,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(d,b,c,a,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(d,c,a,b,operate[i],operate[j],operate[k]) == 1) return 1;if(Create(d,c,b,a,operate[i],operate[j],operate[k]) == 1) return 1;return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值