输入:任意一组正整数(>=2),用空格隔开
分组规则:每组的数字能被该组最小值整除
输出:一共分几组(尽可能小)?
比如:
输入: 2 3 4 5 6 7 8 9 10
分组1: 2 4 6 8
分组2: 3 9
分组3: 5 10
分组4: 7
输出:4
#include<stdlib.h>
int main(){
int num[9]={2,3,4,5,6,7,8,9,10};
int i,j,k=1;
for (i=0;i<=8;i++){
if(num[i]==0){
continue;
}
printf("分组:%d",k++);
printf("%4d",num[i]);
for(j=i+1;j<=8;j++){
if(num[j]==0){
continue;
}
if(num[j]%num[i]==0)
{
printf("%4d",num[j]);
num[j]=0;//剔除已经分好组的数值
}
}
printf("\n");
}
}
新人入站,勿喷qwqヾ|≧_≦|〃
我觉得可以,把数存入数组中,把输入的数组从小到大排列。
然后暴力枚举:
我们希望分组越少越好,当然每组的数越多越好。就从第一个开始枚举,找出它不大于最大数的所有倍数,然后判断后面有没有相等的,有的话就清零了。
然后每次遍历计数就好。。。