1.Problem1:输入三角形的三边长,判断是否能组成三角形
public static void JudgeTriangle(int n){
Scanner in=new Scanner(System.in);
double a,b,c;
for(int i=0;i<n;i++){
a=in.nextInt();
b=in.nextInt();
c=in.nextInt();
if(a<=0||b<=0||c<=0||(a+b)<=c||(b+c)<=a||(c+a<=b)){
System.out.println("no");
}
else{
System.out.println("yes");
}
}
}
2.出 NaN,有则输出两解的值(保留两位小数)。注意精度控制!
public static void CalculateSolution(double a,double b,double c){
DecimalFormat dl=new DecimalFormat();
String format=new String(".00");
dl.applyPattern(format);
double theta=Math.pow(b,2)-4*a*c;
if(theta<0){
System.out.println("NaN");
}
else if(theta==0){
double result1;
double result2;
result2=result1=-(2*a/b);
System.out.println(dl.format(result1)+" "+dl.format(result2));
}
else{
double result1;
double result2;
result1=(-b+Math.sqrt(theta))/(2*a);
result2=(-b-Math.sqrt(theta))/(2*a);
System.out.println(dl.format(result1)+" "+dl.format(result2));
}
}
3.Problem3:输入几组整数(先输入要输入的数据组数,再输入每组数据个数,其次输入数据),从小到大排序输出。
public static void SortNum(int [][]a){
for(int i=0;i<a.length;i++){
Arrays.sort(a[i]);
}
for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
4.Problem4:时差问题。一个地方和北京相差17个小时(比北京慢17h),输入北京时间,输出当地时间;输入格式:年 月 日 时 分,输出格式一样。此题注意输出格式控制(后四项数字位数为两位)
public static Boolean isLeafYear(int year){
if(year%4==0&&year%100!=0 || year%400==0){
return true;
}
else{
return false;
}
}
public static void CalculateNowTime(){
Scanner in=new Scanner(System.in);
int yearB,monthB,dayB,hourB,minB;
int yearN=0,monthN=0,dayN=0,hourN=0,minN=0;
yearB=in.nextInt();
monthB=in.nextInt();
dayB=in.nextInt();
hourB=in.nextInt();
minB=in.nextInt();
minN=minB;
if(hourB>=17){
hourN=hourB-17;
dayN=dayB;
monthN=monthB;
yearN=yearB;
}
else{
hourN=hourB-17+24;
if(dayB>1){
dayN=dayB-1;
monthN=monthB;
yearN=yearB;
}
else{
Boolean IsLeafYear=isLeafYear(yearB);
if(monthB==2||monthB==4||monthB==6||monthB==8||monthB==9||monthB==11){
monthN=monthB-1;
dayN=31;
yearN=yearB;
}
else if(monthB==5||monthB==7||monthB==10||monthB==11){
monthN=monthB-1;
dayN=30;
yearN=yearB;
}
else if(monthB==3){
monthN=monthB-1;
yearN=yearB;
if(IsLeafYear){
dayN=29;
}
else{
dayN=28;
}
}
else if(monthB==1){
yearN=yearB-1;
monthN=12;
dayN=31;
}
}
}
DecimalFormat dl=new DecimalFormat();
String format=new String("00");
dl.applyPattern(format);
System.out.println(dl.format(yearN)+" "+dl.format(monthN)+" "+dl.format(dayN)+" "+dl.format(hourN)+" "+dl.format(minN));
}
5.Problem5:算数表达式求值(算是最难的一题了),输入算数表达式(可含小数,不含括号),输出计算数值(整数直接输出整型,小数保留两位小数)。
static int Calculate[][]=new int[][]{{1,1,0,0},{1,1,0,0},{1,1,1,1,},{1,1,1,1}};
static int Location(char opera){
if(opera=='+'){
return 0;
}
else if(opera=='-'){
return 1;
}
else if(opera=='*'){
return 2;
}
else{
return 3;
}
}
static boolean Comp(char opera1,char opera2){
int x,y;
x=Location(opera1);
y=Location(opera2);
if(Calculate[x][y]==1){
return true;
}
else{
return false;
}
}
public static double CalculateResult(double num1,double num2,char opera){
if(opera=='+'){
return num1+num2;
}
else if(opera=='-'){
return num1-num2;
}
else if(opera=='*'){
return num1*num2;
}
else{
return num1/num2;
}
}
public static void CalculateExpression(String expression){
Stack<Double> stackNum=new Stack<>();
Stack<Character> stackOpera=new Stack<>();
StringBuffer str;
char[] Expression=expression.toCharArray();
int i=0;
while(i<Expression.length){
str=new StringBuffer();
if(Expression[i]>='0'&&Expression[i]<='9'){
while(i<Expression.length&&(Expression[i]>='0'&&Expression[i]<='9'||Expression[i]=='.')){
str.append(Expression[i++]);
}
stackNum.push(Double.valueOf(str.toString()));
}
else{
if(stackOpera.isEmpty()){
stackOpera.push(Expression[i++]);
}
else{
char opera1=stackOpera.peek();
char opera2=Expression[i++];
if(Comp(opera1,opera2)){
stackOpera.pop();
double num2=stackNum.pop();
double num1=stackNum.pop();
double result=CalculateResult(num1,num2,opera1);
stackNum.push(result);
}
stackOpera.push(opera2);
}
}
}
while(!stackOpera.isEmpty()){
char opera1=stackOpera.pop();
double num2=stackNum.pop();
double num1=stackNum.pop();
double result=CalculateResult(num1,num2,opera1);
stackNum.push(result);
}
System.out.println(stackNum.peek());
}