博文网址: for循环,可以有多强大?(复杂for循环的例子)_xifengcode-优快云博客
在C或C++语言中,for循环是一个比较基本的语句。下面的例子展示了一个for循环可以有多强大。
题目:假设有五个整数,并且规定加减乘除各使用一次,编程序找到一个算术表达式,它的运算结果正好是24。假设加减乘除的算符优先级都是相等的,按从左到右的次序计算。
这个题目,是不是要写很多行代码呢?其实不用,一个for循环就够用了。下面给出了程序代码。注意:这个程序甚至没有使用if...else...,也没有使用switch...case。
#include<stdio.h>
int main()
{
int j=1,S[5],t=1,k=0,A[5],D[5],P[6]={6939,7710,10023,11565,13878,14649},X,Y,Z;
char O[5]="+-*/";
double r=0.0;
for(printf("我是一个聪明的小程序. 假设有五个整数, 并且规定加减乘除各\n使用一次, 我能找到一个算术表达式, 它的运算结果正好是24.\n( 假设加减乘除的算符优先级都是相等的, 按从左到右的次序计\n算 )\n*\t*\t*\t*\t*\t*\t*\t*\n请输入五个整数(例如, 2 4 8 21 5):\n"),scanf("%d%d%d%d%d",D,D+1,D+2,D+3,D+4);k<2880&&t;X=k/576-1,Y=P[k/24%6],Z=k/24%24/6<<1,S[++X%5]=Y>>Z%8&3,S[++X%5]=Y>>(Z+2)%8&3,S[++X%5]=Y>>(Z+4)%8&3,S[++X%5]=Y>>(Z+6)%8&3,S[++X%5]=4,r=j==1?D[S[0]]:r,A[j]=P[k%6]>>((k%24/6<<1)+((j-1)<<1))&3,r=A[j]==0?r+D[S[j]]:A[j]==1?r-D[S[j]]:A[j]==2?r*D[S[j]]:r/D[S[j]],t=r>23.9999&&r<24.0001&&j==4?0:1,j=j%4+1,k=j==1?k+1:k,k==2880||t==0?t==0?(printf("\n%d%c%d%c%d%c%d%c%d=24\n\n\n作者: xifengcode@163.com\n请按Enter键退出 . . .",D[S[0]],O[A[1]],D[S[1]],O[A[2]],D[S[2]],O[A[3]],D[S[3]],O[A[4]],D[S[4]]),getchar(),getchar()):(printf("\n不存在这样的表达式\n\n\n作者: xifengcode@163.com\n请按Enter键退出 . . ."),getchar(),getchar()):1);
return 0;
}