华农赵子龙


私信TA

用户名:201812100214

访问量:1478

签 名:

等  级
排  名 3094
经  验 2037
参赛次数 1
文章发表 3
年  龄 0
在职情况 学生
学  校 华南农业大学
专  业

  自我简介:

解题思路: (1)在1-100000里面循环找所求数:

for (int i=1; i<100000 ; i++)


                (2)每个数从低位数到高位数求阶层,设sum求个位数阶层和

                      
                        

  while (a){
          int c = a%10;
          int mix = 1;
          for (int j=1; j<=c; j++){
             mix *= j;
          }
          sum += mix;
          a /= 10;
  }


                (3)符合条件的数存入之前定义好的数组,然后找出数头

if (sum == i){
			s[count].value = i;
			while (sum>=10){
				sum /= 10;
			}
			s[count].head = sum;
			count++;
		}

                 (4)根据数头排序

for (int i=0; i<5; i++){
		if (s[i].value != 0){
			for (int j=0; j<5-i-1; j++){
				if (s[j].value != 0){
					if (s[j].head > s[j+1].head){
						struct data temp = s[j];
						s[j] = s[j+1];
						s[j+1] = temp;
					}
				}
			}
		}
	}

   

                 (5)将拍好的数组输出

for (int i=0; i<5; i++){
		if (s[i].value != 0){
			printf("%d ", s[i].value );
		}
	}


注意事项:(1)因为最终的根据首数字排序, 所以动用了结构;

                (2)因为楼主技术有限,结构数组没能动态增加,还敬请会的同学能评论指导一下

参考代码:

#include <stdio.h>

struct data
{
	int value;
	int head;	
}s[5];

int main(int argc, char const *argv[])
{
	int count = 0;
	for (int i=1; i<100000 ; i++){
		int a = i;
		int sum = 0;
		while (a){
			int c = a%10;
			int mix = 1;
			for (int j=1; j<=c; j++){
				mix *= j;
			}
			sum += mix;
			a /= 10;
		}
		if (sum == i){
			s[count].value = i;
			while (sum>=10){
				sum /= 10;
			}
			s[count].head = sum;
			count++;
		}
	}
	for (int i=0; i<5; i++){
		if (s[i].value != 0){
			for (int j=0; j<5-i-1; j++){
				if (s[j].value != 0){
					if (s[j].head > s[j+1].head){
						struct data temp = s[j];
						s[j] = s[j+1];
						s[j+1] = temp;
					}
				}
			}
		}
	}
	for (int i=0; i<5; i++){
		if (s[i].value != 0){
			printf("%d ", s[i].value );
		}
	}

	return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »