20701除法 |
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述
|
输入正整数n,按从小到大的顺序输出所有满足表达式abcde/fghij=n的abcde和fghij,其中a~j恰好为数字0~9的一个排列。 如果没有符合题意的数,输出0。本题所说的五位数可以包括前导0的,如01234在这里也称为五位数。
|
输入
|
一个正整数n
|
输出
|
若干行,每行包括两个符合要求的五位正整数(每行的两个数先大后小),两数之间用一个空格隔开。
|
输入示例
|
62
|
输出示例
|
79546 01283
94736 01528 |
其他说明
|
数据范围 2≤n≤79;题目中的从小到大指的是输出数据每行的第一个数是从小到大的顺序。
|
题解:spritf练习,有几个坑:
1.sprintf在进去一个后会自动在后面补'\0'。。。
2.不满足题意输出0。。。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')sig=-;ch=getchar();}
while(isdigit(ch))x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=,buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
int k;bool flag=false;
void printd(int S){
if(S<)write();write(S);return;
}
void check(int S){
if(S%k!=)return;
char s[]={''};bool vis[]={};sprintf((S<?s+:s),"%d",S);int T=S/k;
s[]='';sprintf((T<?s+:s+),"%d",T);for(int i=;i<;i++)if(vis[s[i]-''])return;else vis[s[i]-'']=true;
printd(S);PAU;printd(T);ENT;flag=true;
return;
}
void init(){
k=read();
for(int S=;S<=;S++)check(S);
if(!flag)write();
return;
}
void work(){
return;
}
void print(){
return;
}
int main(){init();work();print();return ;}