小乐乐从老师口中听到了二段数这个名词,想更深入的了解二段数。
二段数是这样的正整数:恰好包含两种不同的十进制数字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
#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
//自测是可以的,但是这环境跑不出来,可能超时了。。。
import java.io.*;
import java.lang.*;
import java.util.*;
public class Main{
public static void main(String [] args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=null;
while((str=br.readLine())!=null){
int n=Integer.parseInt(str);
if(n>=1&&n<=99999){
long result=0;
for(int i=1;i<=2000000;i++){
result =(long)i*n;
if(bnum(result)){
System.out.println(n+": "+result);
break;
}
}
}else{
break;
}
}
}
public static boolean bnum(long num){
String s=""+num;
char [] c=s.toCharArray();
int isNum=0;
for(int i=1;i<c.length;i++){
if(c[i]!=c[i-1]){
isNum++;
}
}
if(isNum==1){
return true;
}else{
return false;
}
}
} #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>
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;
}
}
}
}
大数据超时 /*
现在的能力只能这样了,以后能力提升后再来
超时了,而且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;
} bool Judge(long long num)
{
string tmp;
tmp = to_string(num);
queue<char> q;
q.push(tmp.at(0));
char pre = tmp.at(0);
for (int i = 1; i < tmp.length(); i++)
{
char cur = tmp.at(i);
q.push(cur);
if (cur == pre)
{
q.pop();
}
pre = cur;
}
return q.size() == 2 ? true : false;
} while True:
try:
list=int(input())
if list!=0:
for n in range(2,10000):
test=n*list
str_test=str(test)
s=str_test[0:1]
t=str_test[-1:]
if s==t&nbs***bsp;s==0:
continue
set_test=set()
for letter in str_test:
set_test.add(letter)
if len(set_test)==2:
list_test=[]
flag=True
st=s+t
cnt=str_test.count(st)
if cnt>1:
flag=False
if flag==True:
print("{}:{}".format(list,test))
break
else:
break
except:
break while True:
n=int(input())
if(n==0):
break
flag=0
if n<=50:
for i in range(2,100):
num=n*i
if num>=10:
print("%d: %d"%(n,num))
break
else:
for w in range(len(str(n*2)),100):
if flag:
break
for i in range(1,10):
if flag:
break
for j in range(0,10):
if flag:
break
if i!=j:
for ws in range(1,w):
s=[]
for aw in range(0,ws):
s.append(i)
for bw in range(0,w-ws):
s.append(j)
num=int("".join(map(str,s)))
if (num%n==0)&(num>n):
print("%d: %d"%(n,num))
flag=1
break #include <iostream>
using namespace std;
bool isTwiceNum(long long num){
int more = 0, less = 0;
while(num >= 10){
if(num%10 > num/10%10)
less++;
if(num%10 < num/10%10)
more++;
num/=10;
}
if(less==1 && more==0 || less==0 && more==1)
return true;
return false;
}
int main(){
ios::sync_with_stdio(0);//而这段语句可以来打消iostream的输入 输出缓存,可以节省许多时间
long long n;
while(cin>>n){
if(n==0)
break;
long long num = n;
for(long long i = 2; !isTwiceNum(num) || num == n; i++){
num = n * i;
}
cout<<n<<": "<<num<<endl;
}
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;
} 这个用例真的不知道该怎么搞