C语言编程:求用数字0至m(m>2,键盘输入)可以组成多少没有重复的三位偶数? 并输出这些偶数
根据输入数字,组合所有3位数,去重复并判断奇偶并保存到动态数组中。
#include <stdio.h>
#include <malloc.h>
int *getNum3(int *nums,int n1,int n2,int n3);
int cnt=0;
int main()
{
int i,j,k,m=0;
int *nums=NULL;
while(1)
{
if(nums) free(nums),nums=NULL,cnt=0;
while(m<=2) printf("请输入m的值(m>2):"),scanf("%d",&m);
for(i=1;i<=m;i++)
for(j=0;j<=m;j++)
for(k=0;k<=m;k++)
{
nums=getNum3(nums,i,j,k);
if(!nums)return 1;
printf("第%d个数字%d已记录。\n",cnt,nums[cnt-1]);
}
for(i=0,printf("组成%d个不重复的3位偶数为:\n",cnt);i<cnt;i++)
printf("%d\n",nums[i]);
m=0,printf("---------------------------------------\n");
}
return 0;
}
int *getNum3(int *nums,int n1,int n2,int n3)
{
int i,flag=1,num,*nTemp=NULL;
num=n1*100+n2*10+n3;
for(i=0;i<cnt;i++)
if(nums && nums[i]==num) printf("数字%d重复舍弃!\n",num),flag=0;
if(num!=0 && num%2!=0) printf("数字%d非偶数舍弃!\n",num),flag=0;
if(flag)
{
if(!nums)
nTemp=(int *)malloc(sizeof(int)*(cnt+1));
else
nTemp=(int *)realloc(nums,sizeof(int)*(cnt+1));
if(!nTemp) return NULL;
nums=nTemp;
nums[cnt]=num;
cnt++;
}
return nums;
}