面试OR笔试9——1121231234

引用lmjy的题目:https://blog.csdn.net/u013949069/article/details/77600384

 

import java.util.Scanner;
public class Main
{
	public static void main(String[] args) 
	{
		/*
		 * 题目描述:
		    	0-9的整数按照这样的规律排列:第一个数为1,
		    	第2-3个数为1, 2,第4-6个数为1, 2, 3,第7-10个数为1, 2,3, 4。。。。。。。
		    	连在一起是1121231234。。。。。。。123456789101112131415。。。。。。。
		    	求第n个数是多少。
		 */
		
		/*
		 * 解题思路:
		 * 		从规律可看出每个数值之间的距离是1+2+3+...n
		 * 		例如第一个数是1,第二个数是1+2,第三个数是1+2+3以此类推
		 * 		从而只需要判断输入的数值在第几个数区间内,
		 * 		例如输入5,小于1+2+3,从而可以推算出步数,
		 * 		那么只需要构建一个1-step的字符串然后根据步数剪切然后拼接就行
		 */
		
//		1、输入数值
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		
//		2、记录步数
		int cnt = 0;
		int sum = 0;
		while(sum < n)
		{
			cnt++;
			sum+=cnt;
		}
		
//		3、根据步数构建字符串
		StringBuilder str = new StringBuilder();
		StringBuilder con = new StringBuilder();
		for(int i = 1; i <= cnt+1; ++i){
			str.append(i);
		}
		
//		4、剪切拼接字符串
		for(int i = 1; i <= cnt; ++i)
		{
			con.append(str.substring(0,str.indexOf(i+1+"")));
		}
		System.out.println(con);
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值