输出0-10000之间 3的倍数而且含5的数,如15,54,555等等。
本题很简单,但是求:
1、最容易理解的解法,
2、代码最短的解法
3、最高效的解法。抛砖引玉,先贴一个。(有bug) static void foo(){
int j=0;int k=0;
for(int i=0;i<10000;i++){
//k++;
if(i%3== 0){
int n=i,m=i;
while(m!=0){
m=m%10;
if(m==5){/*j++;*/System.out.printf ("i=%3d \n ",i);}
n=n/10;
m=n;
}
}
}
//System.out.println(k+" "+j);
}
本题很简单,但是求:
1、最容易理解的解法,
2、代码最短的解法
3、最高效的解法。抛砖引玉,先贴一个。(有bug) static void foo(){
int j=0;int k=0;
for(int i=0;i<10000;i++){
//k++;
if(i%3== 0){
int n=i,m=i;
while(m!=0){
m=m%10;
if(m==5){/*j++;*/System.out.printf ("i=%3d \n ",i);}
n=n/10;
m=n;
}
}
}
//System.out.println(k+" "+j);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<10001;i++){
if(i%3==0){
if(String.valueOf(i).indexOf("5")!= -1){
System.out.println(i);
}
}
}
}
for(int i=3;i<10000;i+=3){
}
应该是一种解法
public static void main(String[] args) {
for(int i=3;i<10001;i+=3){
if(String.valueOf(i).indexOf("5")!= -1){
System.out.println(i);
}
}
}楼上的意思?
3楼,good。
/**
*
* @author ZangXT
*/
public class Main { public static void main(String[] args) {
for (int i = 3; i < 10000; i += 3) {
int m = i;
do {
if (m % 10 == 5) {
System.out.println(i);
break;
}
m /= 10; } while (m != 0);
}
}
}
public class Test3 {
public static void main(String[] args) {
String s = null;
for(int i=3; i<10000; i+=3){
s = "" + i;
if(s.matches("\\d*5\\d*")){
System.out.print(s + " ");
}
}
}
}
刚学了正则表达式……用一下……
public final class Test1 { public static void main(String[] args) { int sum = 0; for (int i = 3; i < 10000; i += 3) {
if (String.valueOf(i).indexOf("5") != -1) {
System.out.println(i);
sum++;
}
}
System.out.println("SUM: " + sum);
}
}
if (i % 3 == 0 && String.valueOf(i).indexOf("5") > -1)
System.out.println(i);
int sum=0;
for (int i = 0; i <= 10000; i += 3)
if (i % 3 == 0 && String.valueOf(i).indexOf("5") > -1)
sum++;
我又想到了一个:
static void foo(){
for(int i=0;i<10000;i++){
if(i%3== 0 && include(i,5)){
System.out.printf ("i=%3d ",i);
}
}
}
static boolean include(int i,int x){
while ( i != 0){
if (i % 10 == x) return true;
i /=10;
}
return false;
}
public static void main(String args[]) {
for (int i = 3; i < 1000; i += 3) {
if ((i + "").matches("^\\d*5\\d*$"))
System.out.println(i);
}
}
}
class Test
{
public static void main(String args[])
{
String str;
for(int i=3;i<10000;i++)
{
if(i%3==0)
{
str=Integer.toString(i);//将每个整数值转换成字符串对象
for(int k=0;k<str.length();k++)
{
if(str.charAt(k)==53)//53为5的ASCII值
System.out.println(i);
}
}
}
}
}
四个数 5 7 a b
a,b的取值范围是 0__9 只要满足a+b是3的倍数就可以
然后四个数进行全排列,
注:只要每位数字之和能被3整除,这个数字就是3的倍数.
用for(int i=3;i<10000;i+=3)加正则: 10000/3=3333
再算上其他的其实根本效率优势
对于符合条件的a,b还要注意a,b为(0,0),(3,3),(6,6),(9,9)的情况,因为有重复的数出现,必须过滤。
对于a,b为(5,7),(7,5),(5,1),(1,5),(4,5),(5,4)等也要单独处理
感觉代码写起来并不方便。
void foo_2(){
for(int i=0;i<1000;i+= 3){
if(include(i,5) && include( i,7)){
System.out.print (" "+i);
}
} private boolean include(int i,int x){
while ( i != 0){
if (i % 10 == x) return true;
i /=10;
}
return false;
}