小乐乐从老师口中听到了二段数这个名词,想更深入的了解二段数。
二段数是这样的正整数:恰好包含两种不同的十进制数字s和t,s不是0,并且s的所有出现均排列在所有的t的前面。例如,44444411是二段数(s是4,t是1),41、10000000和5555556也是。但4444114和44444都不是二段数。
这时老师问小乐乐:给你一个任意的正整数n,你能求出比n大并且是n的倍数的最小二段数吗?请你帮助小乐乐解答这个问题。
小乐乐从老师口中听到了二段数这个名词,想更深入的了解二段数。
二段数是这样的正整数:恰好包含两种不同的十进制数字s和t,s不是0,并且s的所有出现均排列在所有的t的前面。例如,44444411是二段数(s是4,t是1),41、10000000和5555556也是。但4444114和44444都不是二段数。
这时老师问小乐乐:给你一个任意的正整数n,你能求出比n大并且是n的倍数的最小二段数吗?请你帮助小乐乐解答这个问题。
多组输入,每组输入包含一个正整数n (1 ≤ n ≤ 99999)
题目保证测试数据总数不超过500组,当输入n=0时程序结束。
对于每组测试用例,输出正整数n,后面紧跟“: ”,输出答案并换行,即比n大且是n的倍数的最小二段数。
1 2019 0
1: 10 2019: 9999999993
/*
现在的能力只能这样了,以后能力提升后再来
超时了,而且long long也放不下那么大的数
现在的版本只能找出范围在long long以内的数
*/
#include <stdio.h>
int IsTwoNumber(long long x)
{
int count = 0;
while (x)
{
if (x < 10)
{
break;
}
//判断是否变段
if (x % 10 != (x / 10) % 10)
{
count++;
}
x /= 10;
}
//二段数会且只会变段 1 次
if (count == 1)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int n = 0;
int i = 0;
long long sum = 0;
while (scanf("%d", &n), n != 0)
{
i = 1;
while (++i)
{
sum = i * n;
if (IsTwoNumber(sum))
{
printf("%d:%lld\n", n, sum);
break;
}
}
}
return 0;
} #include <stdio.h>
int BinaryNumJudge(long long x)
{
long long a = x % 10;//得到x最右边的数
int flag = 0;
while (x /= 10)//从右向左依次对比数是否发生变化
{
if (a != x % 10)
{
a = x % 10;
flag++;//flag可以检测位数上的值变化了多少次
}
if (flag > 1)
{
break;
}
}
if (flag == 1)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
if (n == 0)
break;
long long i = 0;
for (i = 2 * n; ; i += n)
{
int ret = BinaryNumJudge(i);//判断i是不是二段数,是返回1,不是返回0
if (ret)
{
printf("%d: %lld\n", n, i);
break;
}
}
}
return 0;
}
#include<stdio.h>
int main()
{
int n;
int arr[20]={0};
long long times=0,conpy;
int i=0,j=0,k,d=0;
while(~scanf("%d",&n))
{
if(n==0)
break;
for(i=2;i<10000000;i++)
{
times=i*n;
j=0;
conpy=times;
while(times>0)
{
arr[j]=times%10;
j++;
times=times/10;
}
d=0;
for(k=0;k<j-1;k++)
{
if(arr[k]!=arr[k+1])
d++;
}
if(d==1)
{printf("%d: %lld\n",n,conpy);break;}
}
}
return 0;
} 这个用例真的不知道该怎么搞
#include<stdio.h>
int two(long long m)
{
int x=m%10;
long long y=m/10;
int i=0;
while(y!=0)
{
if(y%10==x)
y=y/10;
else
{
x=y%10;
y=y/10;
i++;
}
}
if(i==1)
return 1;
else
return 0;
}
int main()
{
long long n=0;
int i=2;
long long m=0;
while(scanf("%lld",&n)!=EOF)
{
if(n==0)
break;
else
{
do
{
m=n*i;
if(two(m)==1)
{
printf("%lld: %lld\n",n,m);
i=2;
}
else
i++;
}while(i>2);
}
}
return 0;
}
注意示例中给的提示,2019: 9999999993其中9999999993的大小已经超出了int型的范围,这里需要使用long long
#include<stdio.h>
long fun(long);
int main()
{
long n,sum;
while (scanf("%ld", &n) != EOF)
{
sum = fun(n);
if(sum == -1)
{
continue;
}
printf("%ld: %ld\n",n,sum);
}
return 0;
}
long fun(long n)
{
long index,sum;
int count = 0;
int flag1,flag2,i;
if(n == 0)
{
return -1;
}
else
{
index = n * 2;
i = 2;
while(1)
{
sum = index;
flag1 = index % 10;
while(index)
{
flag2 = index % 10;
if(flag2 != flag1)
{
count++;
flag1 = flag2;
}
index /= 10;
}
if(count == 1 && sum > 9)
{
return sum;
}
else
{
count = 0;
i++;
index = n * i;
}
}
}
}
大数据超时