输出abcde/fghij=x表达式
本帖最后由 Danmoits 于 2020-11-15 08:27 编辑任务描述
本关任务:输入正整数x(2≤x≤79),输出所有形如abcde/fghij=x的表达式,其中i-j由不同的数字0~9组成。
编程要求
在右侧编辑器补充代码,输入x后输出形如abcde/fghij=x的表达式。
测试输入:32;
预期输出:75168/02349=32
测试输入:12;
预期输出:
45792/03816=12
73548/06129=12
89532/07461=12
91584/07632=12
#include<stdio.h>
int main()
{
int h,i,l,m,k,n,p=0,count=0;
double num;
double num_;
int repeat;
double div;
for(i=0;i<100000;i++)
{
num=i;
/*把0到99999的所有数存入数组*/
}
for(i=0;i<100000;i++)
{
for(h=0;h<5;h++,num/10)
{
repeat=(int)num%10;
/*repeat存放每一位数字*/
}
for(l=0;l<5;l++)
{
for(m=0;m<5;m++)
{
if(repeat==repeat)
{
count=1;
}
}
}
/*如果有重复数字,count不为0*/
if(count==0)
{
num_=num;
p++;
}
count=0;
}
}
scanf("%d",&n);
for(i=0;i<100000;i++)
{
for(k=0;k<100000;k++)
{
div=num*1.0/num;
if(div==n)
printf("%05.0f/%05.0f=%d\n",num,num,n);
}
}
return 0;
}
这是我的代码,报错信息:(表示自己看不懂)
src/step10/step10_main.c:40:11: error: expected declaration specifiers or ‘…’ before string constant
scanf(“%d”,&n);
^~
src/step10/step10_main.c:40:16: error: expected declaration specifiers or ‘…’ before ‘&’ token
scanf(“%d”,&n);
^
src/step10/step10_main.c:41:5: error: expected identifier or ‘(’ before ‘for’
for(i=0;i<100000;i++)
^
src/step10/step10_main.c:41:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
for(i=0;i<100000;i++)
^
src/step10/step10_main.c:41:23: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘++’ token
for(i=0;i<100000;i++)
^~
src/step10/step10_main.c:50:5: error: expected identifier or ‘(’ before ‘return’
return 0;
^~
src/step10/step10_main.c:51:1: error: expected identifier or ‘(’ before ‘}’ token
}
^
可以修改我的代码,也可以提供新的代码。(运行时间在20s以内) #include <stdio.h>
int check1(int n)
{
int d = {0} , i , j , m , r ;
for(m = 0 ; n ; n /= 10 , m ++) d = n % 10 ;
for(r = 1 , i = 0 ; i < m - 1 && r ; i ++) {
for(j = i + 1 ; j < m ; j ++) {
if(d == d) {
r -- ;
break ;
}
}
}
return r ;
}
int check2(int a , int b)
{
int d = {0} , e = {0} , i , j, m , n , r ;
for(m = 0 ; a ; a /= 10 , m ++) d = a % 10 ;
for(n = 0 ; b ; b /= 10 , n ++) e = b % 10 ;
r = 0 ;
if(m + n > 8) {
for(r = 1 , i = 0 ; i < m && r ; i ++) {
for(j = 0 ; j < n ; j ++) {
if(e == d) {
r -- ;
break ;
}
}
}
}
return r ;
}
main(void)
{
int i , j , m , n ;
scanf("%d" , & m) ;
for(n = 0 , i = 1000 ; i < 100000 ; i ++) {
if(check1(i)) {
for(j = 1000 ; j < 100000 ; j ++) {
if(check1(j) && check2(i , j)) {
if(i % j == 0 && i / j == m) {
printf("%d / %d = %d\n" , i , j , i / j) ;
n ++ ;
}
}
}
}
}
}
编译、运行实况:
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
12
45792 / 3816
50376 / 4198
71208 / 5934
73128 / 6094
73548 / 6129
81504 / 6792
86304 / 7192
86340 / 7195
89532 / 7461
91032 / 7586
91584 / 7632
97620 / 8135
D:\00.Excise\C> jackz007 发表于 2020-11-14 20:53
编译、运行实况:
为什么在dev上运行你的代码,输入数字后什么反应都没有 Danmoits 发表于 2020-11-14 20:58
为什么在dev上运行你的代码,输入数字后什么反应都没有
会有结果的,需要一点时间和耐心,等等看。 本帖最后由 jackz007 于 2020-11-14 21:43 编辑
结果有问题,没有考虑 4 位数时的前导 0,下面是修改过的代码与编译、运行结果
#include <stdio.h>
int check1(int n)
{
int d = {0} , i , j , m , r ;
for(i = 0 ; n ; n /= 10 , i ++) d = n % 10 ;
for(r = 1 , i = 0 ; i < 4 && r ; i ++) {
for(j = i + 1 ; j < 5 ; j ++) {
if(d == d) {
r -- ;
break ;
}
}
}
return r ;
}
int check2(int a , int b)
{
int d = {0} , e = {0} , i , j, r ;
for(i = 0 ; a ; a /= 10 , i ++) d = a % 10 ;
for(i = 0 ; b ; b /= 10 , i ++) e = b % 10 ;
for(r = 1 , i = 0 ; i < 5 && r ; i ++) {
for(j = 0 ; j < 5 ; j ++) {
if(e == d) {
r -- ;
break ;
}
}
}
return r ;
}
main(void)
{
int i , j , m , n ;
scanf("%d" , & m) ;
for(n = 0 , i = 1000 ; i < 100000 ; i ++) {
if(check1(i)) {
for(j = 1000 ; j < 100000 ; j ++) {
if(check1(j) && check2(i , j)) {
if(i % j == 0 && i / j == m) {
printf("%d / %d = %d\n" , i , j , i / j) ;
n ++ ;
}
}
}
}
}
}
编译、运行实况:
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
12
45792 / 3816 = 12
73548 / 6129 = 12
89532 / 7461 = 12
91584 / 7632 = 12
D:\00.Excise\C>x
3
17469 / 5823 = 3
17496 / 5832 = 3
50382 / 16794 = 3
53082 / 17694 = 3
61749 / 20583 = 3
69174 / 23058 = 3
91746 / 30582 = 3
96174 / 32058 = 3
D:\00.Excise\C> jackz007 发表于 2020-11-14 21:04
会有结果的,需要一点时间和耐心,等等看。
不行啊,输入12后,等了1分钟以上还是什么结果也没有 本帖最后由 jackz007 于 2020-11-14 23:11 编辑
Danmoits 发表于 2020-11-14 23:04
不行啊,输入12后,等了1分钟以上还是什么结果也没有
等 3 分钟左右看看呢,我用的电脑可是 10 年前的笔记本。你可以验证一下我得到的结果,特别是输入 3 的时候,看看是否符合条件,这也可以从侧面佐证这个代码是正确可行的。 jackz007 发表于 2020-11-14 23:08
等 3 分钟左右看看呢,我用的电脑可是 10 年前的笔记本。你可以验证一下我得到的结果,特别是输 ...
不好意思,提交到平台上必须在20s以内运行完毕,3分钟是不让过的 本帖最后由 jackz007 于 2020-11-15 13:12 编辑
Danmoits 发表于 2020-11-15 08:27
不好意思,提交到平台上必须在20s以内运行完毕,3分钟是不让过的
即时完成的版本来了
#include <stdio.h>
int check(int a , int b)
{
int d = {0} , e = {0} , i , k , r ;
if(a < 100000) for(k = a , i = 0 ; k ; k /= 10 , i ++) e = k % 10 ;
if(b < 100000) for(k = b , i = 5 ; k ; k /= 10 , i ++) e = k % 10 ;
for(i = 0 ; i < 10 ; i ++) d] ++ ;
for(r = 1 , i = 0 ; i < 10 ; i ++) {
if(! d) {
r -- ;
break ;
}
}
return r ;
}
main(void)
{
int i , m , n ;
scanf("%d" , & n) ;
for(m = 0 , i = 1234 ; i * n < 98766 ; i ++) {
if(check(i , i * n)) {
m++ ;
printf("%d / %d = %d\n" , i * n , i , n) ;
}
}
} Danmoits 发表于 2020-11-15 08:27
不好意思,提交到平台上必须在20s以内运行完毕,3分钟是不让过的
楼主,测试 9 楼的代码,0 等待。 本帖最后由 Danmoits 于 2020-11-15 15:18 编辑
jackz007 发表于 2020-11-15 13:14
楼主,测试 9 楼的代码,0 等待。
能麻烦你再加一下注释吗,感谢,对那一层再编辑一下即可 jackz007 发表于 2020-11-15 11:31
即时完成的版本来了
大神,注释拜托
页:
[1]