Uva 除法

输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0-9的一个排列(可以有前导0,)

2<=n<=79

样例输入:

63

样例输出:

79546 / 01283 = 62

94736 / 01528 = 62

思路:枚举fghij,算出abcde,判断每一个都不相等

//用sprintf
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
int fghij,abcde,n,i,j,cz=0;
char str[11];
while(scanf("%d",&n)!=EOF&&n)
{
  if(cz++) printf("\n");
  int ok=0;
  for(fghij=1234;;fghij++)
  {
    abcde=fghij*n;
    sprintf(str,"%05d%05d",abcde,fghij);
    if(strlen(str)>10) break;
    sort(str,str+10);
    for(i=1;i<10;i++)
     if(str[i-1]==str[i]) break;
     if(i==10) {printf("%05d / %05d = %d\n",abcde,fghij,n);ok=1;}
  }
  if(ok==0) printf("There are no solutions for %d.\n",n);
}
return 0;
}

//直接一个一个枚举

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
int sum;
int a,b,c,d,e,n,i,sum1,t=0;
int x[10];
while(scanf("%d",&n)!=EOF&&n)
{
   int ok=0;
  if(t++)printf("\n");
  for(a=0;a<=9;a++)
    for(b=0;b<=9;b++)
       for(c=0;c<=9;c++)
         for(d=0;d<=9;d++)
           for(e=0;e<=9;e++)
           {
             if(a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)
              {
                sum1=a*10000+b*1000+c*100+d*10+e;
                sum=sum1*n;
                  x[0]=a;x[1]=b;x[2]=c;x[3]=d;x[4]=e;
                  int i=9,k=1;
                  int s=sum;
                  while(sum)
                  {
                  x[i]=sum%10;
                  i--;
                  sum/=10;
                  k++;
                  }
                  if(sum==0&&k==6)
                  {
                   sort(x,x+10);
                   for(i=1;i<10;i++)
                   if(x[i-1]==x[i]) break;
                   if(i==10) {printf("%05d / %05d = %d\n", s, sum1, n);  ok=1;}

                  }
                }
           }
          if(ok==0) printf("There are no solutions for %d.\n", n);
}
return 0;
}
时间: 2024-10-12 16:22:15

Uva 除法的相关文章

uva 725 Division(除法)暴力法!

uva 725  Division(除法) A - 暴力求解 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0 through 9 once each, such that t

uva 10494 高精度除法

这道题我wa了4次!!!RE了一次,直到看到了RE我才看到了希望,果然,把数组开大一点就过了,小白 在uva上的题好像叙述都不太精确,从来都不说数据最长多少,以至于只能瞎开数组,白白RE了一次,wa的原因是因 为数据类型错了,应该开long long的,我竟然忘了商也可以是大数的,,,唉,还是不够细心,不够认真啊. 贴代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #define ll long l

UVa 202 大数除法

背景:1_WA:忘了每个答案之间有一个空白行!2_WA:没看见等号左右两边都有空格!!!!!!!! 思路:整数和小数分开来求,整数部分直接用整型除法,小数部分:分子=(分子%分母)*10.并且把每个分子储存在str[0]中,当出现已经出现过的分子时,小数部分开始循环! 学习: 1.巢鸽原理(抽屉原理,狄利克雷原则): 简单的描述:如果有n个笼子,n+1只鸽子居住,则至少有一个笼子有两只鸽子. 一般化的描述(用高斯函数来叙述):将n个元素分到m个集合中,至少有一个集合中元素个数大于等于[(n-1)

UVA 10375 选择与除法

一看四个整数的范围,<=10000  所以我们肯定不能直接打表求阶乘 利用唯一分解定理(任何一个大于1的正整数都能够被唯一地分解成质因子乘积) #include<iostream> #include<string> #include<string> #include<string.h> #include<stdio.h> #include<queue> #include<math.h> #include<vec

除法 Division,UVa 725

Description Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0 through 9 once each, such that the first number divided by the second is equal to an integer N, where . That is, abcde / fghij =N wher

Uva 725 除法

紫书P182 直接枚举 0~9 的全排列会超时,枚举fghij就可以了,计算出 abcde ,这里有一个新的函数,也可以不用咯,把每一位数据提取出来,while循环可以做到,这里的新的函数是,sprintf(buf,"%5d%5d",abcde,fghij); 格式化提取,把abcde,fghij每一位提取到字符串buf中,不足5位的补0.然后看每一个位是否都有.都有就是一个0~9的全排列. /*#include <stdio.h> #include <algorit

UVa 725 - Division(枚举简单题)

今日无事,写篇日记.这是我写的第一道uva题(uva是算法竞赛入门经典里使用例题的题目来源),正值暑假,前几天看了书上中文题目和解析,玩了几日san11,又重拾起acm,今天晚上写了一下还是花了点时间. 题目:给你一个数字n,用0~9,10个数字组成两个五位数,使得他们的商为n,按顺序输出所有结果. 1.这里的除法不是c中的除(/)而是整除,一开始以为是整除,但那样79546 / 01283 = 62是一组解,79546+1 / 01283 = 62也是一组解了. 2.复杂度:枚举分子然后分子乘

uva 1564 - Widget Factory(高斯消元+逆元)

题目链接:uva 1564 - Widget Factory 题目大意:n种零件,m次工作日程,零件序号从1到n,给出m次工作日程的信息,x,s,e,表示生产了x个零件,从星期s开始到星期e(有可能是多个星期),然后给出生产的x个零件的序号.求每个零件被生产需要多少天(保证在3到10天) 解题思路:因为不能确定每个工作日程具体生产了几天,所以对应列出的方程均为线性模方程(模7),所以在高斯消元的过程中遇到除法要转换成乘上逆元. #include <cstdio> #include <cs

UVA 10951 - Polynomial GCD(数论)

UVA 10951 - Polynomial GCD 题目链接 题意:给定两个多项式,求多项式的gcd,要求首项次数为1,多项式中的运算都%n,并且n为素数. 思路:和gcd基本一样,只不过传入的是两个多项式,由于有%n这个条件,所以计算过程可以用乘法逆去计算除法模,然后最后输出的时候每项除掉首项的次数就是答案了. 代码: #include <stdio.h> #include <string.h> #include <vector> using namespace s