poj1019

            不用long long int ,int足矣,直接用计算!!!!大笑

            开始只是一个简单的想法,在动手计算之后,终于找出了其中的规律,虽然不怎么简单,但只要大家认真看,还是会发现其中的奥妙的!!!!

            根据题目的规律,在排到N后,总数字个数Sum=((N+1)*N)/2+((N-98)*(N-99))/2+((N-998)*(N-999))/2+((N-9998)*(N9999))/2+。。。

             当然很容易计算,从1数到m的数字个数sum=m+(m-9)+(m-99)+(m-999)+。。。。。

             还未说完全,见谅,但综上及代码,相信大家是看的懂的了,嘿嘿!!!!!!!!!

                      代码如下

#include<stdio.h>
void main()
{   
      int i,j,n,m;
	  scanf("%d",&n);
	 for(i=0;i<n;i++)
	 {   int flag,k=0,sum=0,sumj=0,summ=0;
	       scanf("%d",&m);
		  for(j=1;j<=m;j++)
		 {   int k1=1,k2=1,k3=1,k4=1;
			if(j-10<0) k1=0;
			if(j-100<0)k2=0;
			if(j-1000<0)k3=0;
			if(j-10000<0)k4=0;
			sumj=j+(j-9)*k1+(j-99)*k2+(j-999)*k3+(j-9999)*k4;
			if(m-sum<=sumj)break;
		   sum=((1+j)*j)/2+((j-8)*(j-9)*k1)/2+((j-98)*(j-99)*k2)/2+((j-998)*(j-999)*k3)/2+((j-9998)*(j-9999)*k4)/2;
		}
          for(k=1;k<=m;k++)
		 {   int k1=1,k2=1,k3=1,k4=1;
			if(k-10<0) k1=0;
			if(k-100<0)k2=0;
			if(k-1000<0)k3=0;
			if(k-10000<0)k4=0;
			summ=k+(k-9)*k1+(k-99)*k2+(k-999)*k3+(k-9999)*k4;
			if(summ>=m-sum)break;
		  }
		  flag=summ-(m-sum);
		  if(flag==0)printf("%d\n",k%10);
		  if(flag==1)printf("%d\n",(k%100)/10);
		  if(flag==2)printf("%d\n",(k%1000)/100);
		  if(flag==3)printf("%d\n",(k%10000)/1000);
		  if(flag==4)printf("%d\n",k/10000);
		 }
}


            虽然不是很好的方法,但见在敢于和大家分享,还请大家以后多多赐教哈!!!!新人也!!!!

                                              

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值