#循环输入。每组数据,给定两个非负整数a和b(a,b≤10),求两者的最小公倍数。当没有任何输入时,程序结束。
#解题思路:最大公约数和最小公倍数的关系,a和b的乘积等于最大公约数和最小公倍数的积,也就是说a和b的最大公约数等于a和b的积除以最小公约数。
#代码详解:
#include <stdio.h>
int gcd(int a,int b){
return !b?a:gcd(b,a%b);
}
int main(){
int a,b;
while(scanf("%d %d",&a,&b)!=EOF){
int re=a/gcd(a,b)*b;//先除后乘,避免乘法导致溢出
printf("%d",re);
}
return 0;
}
#没有输入,按照字典序输出所有 1,2,3,4,5 的全排列。
#解题思路:解题用五层循环输出,全排列一共有五个位置,但是每一个数字不能重复,比如说11345就不行。所以我们用一个数组来标记,如果用了i,那么将数组下标为i的标记为1,下一个循环到相同i的时候continue。
#代码详解:
#include <stdio.h>
const int N=5;
int h[6];
int main(){
int i,j,k,l,m;
for(i=1;i<=N;i++){
h[i]=1;
for(j=1;j<=N;j++){
if(h[j]) continue;
h[j]=1;
for(k=1;k<=N;k++){
if(h[k]) continue;
h[k]=1;
for(l=1;l<=N;l++){
if(h[l]) continue;
h[l]=1;
for(m=1;m<=N;m++){
if(h[m]) continue;
printf("%d%d%d%d%d",i,j,k,l,m);
}
h[l]=0;
}
h[k]=0;
}
h[j]=0;
}
h[i]=0;
}
return 0;
}