这道java题怎么做?
注意!不能用if或者三元运算来做! 展开
因为你没有说清楚输入的数据类型是int还是double,所以我就按照int来做了
完全没有用if和任何除输入以外的接口
不一定是最好的方案,但我第一反应就是这样了
利用的原理是整形的负数在内存中的储存方式和java中的带符号移位运算,从而实现从二数中取较大者
注释说得很清楚了,输出格式自己改改就好,如果输入要求是double的话那就会麻烦一些了,不过原理都差不多
效果图
因为是在手机上写有点不方便,一些细节上的东西比如为什么不用数组储存和scanner的关闭我就不写了
下面是文字版,有不明白欢迎追问
import java.util.*;public class M{ //情况 x y z //a>b 0 1 0 //a<b 1 0 0 //a=b 0 0 1 static int bigger(int a,int b){ int x=(a-b)>>>31;//如果a<b则x=1 int y=(b-a)>>>31;//如果b>a则y=1 int z=1-x-y; //如果a=b,那么x,y都会是0,所以加一个z作为特判, //因为x和y至多有一个是1,当且仅当x=y时x=y=0,z=1 return a*y+b*x+a*z; } public static void main(String[] args){ Scanner sc=new Scanner(System.in); int A1,B1,C1; int A2,B2,C2; System.out.println("输入两人三科成绩"); A1=sc.nextInt();B1=sc.nextInt();C1=sc.nextInt(); A2=sc.nextInt();B2=sc.nextInt();C2=sc.nextInt(); int max1=bigger(bigger(A1,B1),C1); int max2=bigger(bigger(A2,B2),C2); System.out.println("张三的最高分"+max1); System.out.println("李四的最高分"+max2); int avg1=(A1+B1+C1)/3; int avg2=(A2+B2+C2)/3; System.out.println("张三的平均分"+avg1); System.out.println("李四的平均分"+avg2); } }
广告 您可能关注的内容 |