博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2008奥运趣味题 《JAVA程序设计》课本159页(2)
阅读量:5826 次
发布时间:2019-06-18

本文共 11909 字,大约阅读时间需要 39 分钟。

hot3.png

要求完成下面的表达式

    a b c d e

   +2 0 0 8 5
  ------------
      f g h i j
其中2008表示2008年在北京举办奥运会,
5表示奥运五环,所以合起来20085刚好表示2008奥运。
要求abcdefghij分别表示从0到9的一位数字,而且 
不允许重复使得上面的加法表达式成立.
/*- ==========================================================*     文件名  :YPR_20085_J.java*     开发人员:袁培荣*     当前版本:1.0.1.2595*     创建时间:2012-02-23*     修改时间:2012-02-23*     功能说明:2008奥运趣味题(单类单方法版)*     版权说明:版权所有 袁培荣 YuanPeirong *     编译环境:Windows 7(x64) SP1 简体中文专业版*     JDK版本: JDK 7U3-B05(Windows-x64)- ==========================================================*//*- ==========================================================*     解题思路:*     设被加数为iAdd,最小值为01234.设和为iSum,最大值为98765*     则iAdd最大值为98765-20085=78680,从而取得iAdd取值范围*     对每一个iAdd,可知iSum=iAdd+20085*     将iAdd,iSum中每一位取出,放入一个一维十元素数组*     对数组进行是否有相当元素的鉴别,若没有,符合要求*     将符合要求的iAdd和iSum输出即可*     可能有多组解,不能得到一组就放弃循环,要循环完iAdd所有取值*     另外,20085中的两个0使得十位和百位相加时必须进位,则*     iAdd的百位为9,这个结论可以减少程度的运算次数。- ==========================================================*/import java.io.*;public class YPR_20085_J{    public static void main(String args [ ])    {	  int iOK=0; //iOK用于记录解的个数	  //变量的命名要尽量规范,这里采用匈牙利命名法,iOK中的i代表类型int	  int iAdd,iSum,iAtemp,iStemp;	  int iForNubmer[]=new int[10];//数组定义和C++不同	  //JAVA中用new产生的东西不需要自行回收,JAVA后台会自动完成	  int i,j;	  System.out.println("2008奥运趣味题的答案为:");	  for(iAdd=1234;iAdd<=78680;iAdd++)	  {	    iSum=iAdd+20085;		iAtemp=iAdd;		iStemp=iSum;		for(i=0;i<=4;i++)		{		  iForNubmer[i]=iAtemp % 10;		  iAtemp=iAtemp/10;		}    	if (iForNubmer[2]!=9)		{continue;}		for(j=0;j<=4;j++)		{		  iForNubmer[j+5]=iStemp % 10;		  iStemp=iStemp/10;		}	    boolean IsSame=false;//C++中布尔型为bool	    for(i=0;i<=8;i++)	    {	      for(j=i+1;j<=9;j++)		  {		    if (iForNubmer[i]==iForNubmer[j])		       {IsSame=true;break;}		  }		if (true==IsSame)		//写成true==IsSame而非IsSame==true的好处是把==错写成=时,编译器会报错,容易查错		   {break;}	    }		if (false==IsSame)		   {		     System.out.println(iAdd+"+20085="+iSum); //用于运行结果1的输出			 //System.out.println("  "+iAdd+'\n'+"+ 20085"+'\n'+"_______"+'\n'+"  "+iSum);			 //System.out.println("=======================");//以上两行用于运行结果2的输出			 iOK++;		   }	  }	  System.out.println("以上共有"+iOK+"组答案。");    }}//此处没有分号,C++中有,这是JAVA和C++的一个区别/*- 运行结果1=====================================================2008奥运趣味题的答案为:14982+20085=3506727951+20085=4803637941+20085=5802641973+20085=6205851963+20085=7204864932+20085=85017以上共有6组答案。=====运行结果2=====================================================  2008奥运趣味题的答案为:  14982+ 20085_______  35067=======================  27951+ 20085_______  48036=======================  37941+ 20085_______  58026=======================  41973+ 20085_______  62058=======================  51963+ 20085_______  72048=======================  64932+ 20085_______  85017=======================以上共有6组答案。- ==========================================================*/

/*- ==========================================================*     文件名  :YPR_20085.java*     开发人员:袁培荣*     当前版本:1.0.2.2595*     创建时间:2012-02-23*     修改时间:2012-02-23*     功能说明:2008奥运趣味题(单类多方法版)*     版权说明:版权所有 袁培荣 YuanPeirong *     编译环境:Windows 7(x64) SP1 简体中文专业版*     JDK版本: JDK 7U3-B05(Windows-x64)- ==========================================================*//*- ==========================================================*     解题思路:*     设被加数为iAdd,最小值为01234.设和为iSum,最大值为98765*     则iAdd最大值为98765-20085=78680,从而取得iAdd取值范围*     对每一个iAdd,可知iSum=iAdd+20085*     将iAdd,iSum中每一位取出,放入一个一维十元素数组*     对数组进行是否有相当元素的鉴别,若没有,符合要求*     将符合要求的iAdd和iSum输出即可*     可能有多组解,不能得到一组就放弃循环,要循环完iAdd所有取值*     另外,20085中的两个0使得十位和百位相加时必须进位,则*     iAdd的百位为9,这个结论可以减少程度的运算次数。- ==========================================================*/import java.io.*;public class YPR_20085{       static String sOut;    public static void main(String args [ ])    { 	  YPR_20085 m_ypr20085m=new YPR_20085();//类对象的创建和初始化与C++不同	  //JAVA中用new产生的东西不需要自行回收,JAVA后台会自动完成	  int iOKm=m_ypr20085m.ypr20085();	  if (0==iOKm)	  //写成0==iOKm而非iOKm==0的好处是把==错写成=时,编译器会报错,容易查错	  {	    System.out.println("对不起,2008奥运趣味题没有答案!");	  }	  else	  {	    System.out.println("2008奥运趣味题的答案为:(共有"+iOKm+"组)");        System.out.println(sOut);	  }    }		public int ypr20085()	{ 	  sOut="";	  int iOK=0; //iOK用于记录解的个数	  //变量的命名要尽量规范,这里采用匈牙利命名法,iOK中的i代表类型int	  int iAdd,iSum,iAtemp,iStemp;	  int iForNubmer[]=new int[10];//数组定义和C++不同	  for(iAdd=1234;iAdd<=78680;iAdd++)	  {	    iSum=iAdd+20085;		iAtemp=iAdd;		iStemp=iSum;		for(int i=0;i<=4;i++)		{		  iForNubmer[i]=iAtemp % 10;		  iAtemp=iAtemp/10;		}    	if (iForNubmer[2]!=9)		{continue;}		for(int j=0;j<=4;j++)		{		  iForNubmer[j+5]=iStemp % 10;		  iStemp=iStemp/10;		}		YPR_20085 m_ypr20085=new YPR_20085();		boolean bIsSame_get=m_ypr20085.bIsSame(iForNubmer);//C++中布尔型为bool		if (false==bIsSame_get)		   {		     sOut=sOut+iAdd+"+20085="+iSum+'\n'; //用于运行结果1的输出			 //sOut=sOut+"  "+iAdd+'\n'+"+ 20085"+'\n'+"_______"+'\n'+"  "+iSum+'\n';			 //sOut=sOut+"======================="+'\n'; //以上两行用于运行结果2的输出			 iOK++;		   }	  }	  return iOK;	}		public boolean bIsSame(int iInt[])  //用于判断数组中有无相同元素	{ 	  int i,j;	  boolean IsSame=false;	  for(i=0;i<=8;i++)	  {	    for(j=i+1;j<=9;j++)		{		  if (iInt[i]==iInt[j])		     {IsSame=true;break;}		}		if (true==IsSame)		   {break;}	  }	  return IsSame;	}}//此处没有分号,C++中有,这是JAVA和C++的一个区别/*- 运行结果1=====================================================2008奥运趣味题的答案为:(共有6组)14982+20085=3506727951+20085=4803637941+20085=5802641973+20085=6205851963+20085=7204864932+20085=85017=====运行结果2=====================================================  2008奥运趣味题的答案为:(共有6组)  14982+ 20085_______  35067=======================  27951+ 20085_______  48036=======================  37941+ 20085_______  58026=======================  41973+ 20085_______  62058=======================  51963+ 20085_______  72048=======================  64932+ 20085_______  85017=======================- ==========================================================*/

 

/*- ==========================================================*     文件名  :YPR_20085_m.java*     开发人员:袁培荣*     当前版本:1.0.3.2595*     创建时间:2012-02-23*     修改时间:2012-02-23*     功能说明:2008奥运趣味题(多类多方法版)*     版权说明:版权所有 袁培荣 YuanPeirong *     编译环境:Windows 7(x64) SP1 简体中文专业版*     JDK版本: JDK 7U3-B05(Windows-x64)- ==========================================================*//*- ==========================================================*     解题思路:*     设被加数为iAdd,最小值为01234.设和为iSum,最大值为98765*     则iAdd最大值为98765-20085=78680,从而取得iAdd取值范围*     对每一个iAdd,可知iSum=iAdd+20085*     将iAdd,iSum中每一位取出,放入一个一维十元素数组*     对数组进行是否有相当元素的鉴别,若没有,符合要求*     将符合要求的iAdd和iSum输出即可*     可能有多组解,不能得到一组就放弃循环,要循环完iAdd所有取值*     另外,20085中的两个0使得十位和百位相加时必须进位,则*     iAdd的百位为9,这个结论可以减少程度的运算次数。- ==========================================================*/import java.io.*;public class YPR_20085_m{    public static void main(String args [ ])    { 	  YPR20085 m_ypr20085m=new YPR20085();//类对象的创建和初始化与C++不同	  //JAVA中用new产生的东西不需要自行回收,JAVA后台会自动完成	  int iOKm=m_ypr20085m.ypr20085();	  if (0==iOKm)	  //写成0==iOKm而非iOKm==0的好处是把==错写成=时,编译器会报错,容易查错	  {	    System.out.println("对不起,2008奥运趣味题没有答案!");	  }	  else	  {	    System.out.println("2008奥运趣味题的答案为:(共有"+iOKm+"组)");		System.out.println(YPR20085.sOut);	  }    }}//此处没有分号,C++中有,这是JAVA和C++的一个区别class YPR20085{	    static String sOut;	public int ypr20085()	{ 	  sOut="";	  int iOK=0; //iOK用于记录解的个数	  //变量的命名要尽量规范,这里采用匈牙利命名法,iOK中的i代表类型int	  int iAdd,iSum,iAtemp,iStemp;	  int iForNubmer[]=new int[10];//数组定义和C++不同	  for(iAdd=1234;iAdd<=78680;iAdd++)	  {	    iSum=iAdd+20085;		iAtemp=iAdd;		iStemp=iSum;		for(int i=0;i<=4;i++)		{		  iForNubmer[i]=iAtemp % 10;		  iAtemp=iAtemp/10;		}    	if (iForNubmer[2]!=9)		{continue;}		for(int j=0;j<=4;j++)		{		  iForNubmer[j+5]=iStemp % 10;		  iStemp=iStemp/10;		}		BISSAME m_ypr20085=new BISSAME();		boolean bIsSame_get=m_ypr20085.bIsSame(iForNubmer);//C++中布尔型为bool		if (false==bIsSame_get)		   {		     sOut=sOut+iAdd+"+20085="+iSum+'\n'; //用于运行结果1的输出			 //sOut=sOut+"  "+iAdd+'\n'+"+ 20085"+'\n'+"_______"+'\n'+"  "+iSum+'\n';			 //sOut=sOut+"======================="+'\n'; //以上两行用于运行结果2的输出			 iOK++;		   }	  }	  return iOK;	}}//此处没有分号,C++中有,这是JAVA和C++的一个区别	class BISSAME{	public boolean bIsSame(int iInt [])  //用于判断数组中有无相同元素	{ 	  int i,j;	  boolean IsSame=false;	  for(i=0;i<=8;i++)	  {	    for(j=i+1;j<=9;j++)		{		  if (iInt[i]==iInt[j])		     {IsSame=true;break;}		}		if (true==IsSame)		   {break;}	  }	  return IsSame;	}}//此处没有分号,C++中有,这是JAVA和C++的一个区别/*- 运行结果1=====================================================2008奥运趣味题的答案为:(共有6组)14982+20085=3506727951+20085=4803637941+20085=5802641973+20085=6205851963+20085=7204864932+20085=85017=====运行结果2=====================================================  2008奥运趣味题的答案为:(共有6组)  14982+ 20085_______  35067=======================  27951+ 20085_______  48036=======================  37941+ 20085_______  58026=======================  41973+ 20085_______  62058=======================  51963+ 20085_______  72048=======================  64932+ 20085_______  85017=======================- ==========================================================*/

/*- ==========================================================*     文件名  :YPR_20085_cppJ.cpp*     开发人员:袁培荣*     当前版本:1.0.1.2595*     创建时间:2012-02-23*     修改时间:2012-02-23*     功能说明:2008奥运趣味题(C++单函数版)*     版权说明:版权所有 袁培荣 YuanPeirong *     编译环境:Windows 7(x64) SP1 简体中文专业版*     编译器:  Visual Studio 2010 SP1 及 MinGW 2011118- ==========================================================*//*- ==========================================================*     解题思路:*     设被加数为iAdd,最小值为01234.设和为iSum,最大值为98765*     则iAdd最大值为98765-20085=78680,从而取得iAdd取值范围*     对每一个iAdd,可知iSum=iAdd+20085*     将iAdd,iSum中每一位取出,放入一个一维十元素数组*     对数组进行是否有相当元素的鉴别,若没有,符合要求*     将符合要求的iAdd和iSum输出即可*     可能有多组解,不能得到一组就放弃循环,要循环完iAdd所有取值*     另外,20085中的两个0使得十位和百位相加时必须进位,则*     iAdd的百位为9,这个结论可以减少程度的运算次数。- ==========================================================*/#include
using namespace std;int main(){ int iOK=0; //iOK用于记录解的个数 int iAdd,iSum,iAtemp,iStemp; int iForNubmer[10]; int i,j; cout<<"2008奥运趣味题的答案为:"<

'- =========================================================='*     文件名  :YPR_20085_VBA.bas'*     开发人员:袁培荣'*     当前版本:1.0.1.2595'*     创建时间:2012-02-23'*     修改时间:2012-02-23'*     功能说明:2008奥运趣味题(VBA版)'*     版权说明:版权所有 袁培荣 YuanPeirong '*     编译环境:Windows 7(x64) SP1 简体中文专业版'*     VBA版本: 7.0.1590'- ==========================================================*/'/*- =========================================================='*     解题思路:'*     设被加数为iAdd,最小值为01234.设和为iSum,最大值为98765'*     则iAdd最大值为98765-20085=78680,从而取得iAdd取值范围'*     对每一个iAdd,可知iSum=iAdd+20085'*     将iAdd,iSum中每一位取出,放入一个一维十元素数组'*     对数组进行是否有相当元素的鉴别,若没有,符合要求'*     将符合要求的iAdd和iSum输出即可'*     可能有多组解,不能得到一组就放弃循环,要循环完iAdd所有取值'*     另外,20085中的两个0使得十位和百位相加时必须进位,则'*     iAdd的百位为9,这个结论可以减少程度的运算次数。'- ==========================================================Private Sub CommandButton1_Click()Dim iOK As IntegerDim iAdd, iSum, iAtemp, iStemp As LongDim iForNumber(1 To 10) As LongDim i, j As IntegerDim IsSame As BooleanThisWorkbook.ActiveSheet.Cells(1, 1) = "2008奥运趣味题的答案为:"For iAdd = 1234 To 78680	iSum = iAdd + 20085	iAtemp = iAdd	iStemp = iSum	For i = 1 To 5	iForNumber(i) = iAtemp Mod 10	iAtemp = iAtemp \ 10	Next i	For j = 6 To 10	iForNumber(j) = iStemp Mod 10	iStemp = iStemp \ 10	Next j	IsSame = False	For i = 1 To 9		For j = (i + 1) To 10			If (iForNumber(i) = iForNumber(j)) Then			IsSame = True			Exit For			End If		Next j	If (IsSame = True) Then	    Exit For	End If	Next i	If (IsSame = False) Then		iOK = iOK + 1		Dim str As String		ThisWorkbook.ActiveSheet.Cells(iOK + 1, 1) = "(" & iOK & ")"		ThisWorkbook.ActiveSheet.Cells(iOK + 1, 2) = iAdd		ThisWorkbook.ActiveSheet.Cells(iOK + 1, 3) = "+"		ThisWorkbook.ActiveSheet.Cells(iOK + 1, 4) = 20085		ThisWorkbook.ActiveSheet.Cells(iOK + 1, 5) = "="		ThisWorkbook.ActiveSheet.Cells(iOK + 1, 6) = iSum	End IfNext iAddThisWorkbook.ActiveSheet.Cells(iOK + 2, 1) = "结束"End Sub

转载于:https://my.oschina.net/u/186539/blog/42378

你可能感兴趣的文章
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
Linux基础命令---rmdir
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>