|
|
发表于 2016-7-9 02:40:33
|
显示全部楼层
本帖最后由 人造人 于 2016-7-9 02:46 编辑
这题目有点意思,我把2个都写完了,初步验证没有问题,如果发现问题,欢迎提出^_^
第一个比较简单
第二个我不是很理解题目(我按照自己的理解写的)
嗯...注释吗,太难写了^_^,几乎没有什么注释,如果看不懂,提出来
第一个
- #include <stdio.h>
- #include <math.h>
- #define NUM_MIN 100
- #define NUM_MAX 999
- int narcissus(int num)
- {
- int ge_wei, shi_wei, bai_wei;
-
- if(num < NUM_MIN || num > NUM_MAX)
- {
- return 0;
- }
-
- ge_wei = num % 10;
- shi_wei = num / 10 % 10;
- bai_wei = num /100 % 10;
-
- if( num == (int)(pow(bai_wei, 3) + pow(shi_wei, 3) + pow(ge_wei, 3)) )
- {
- return 1;
- }
-
- return 0;
- }
- int main(void)
- {
- int i;
-
- for(i = NUM_MIN; i <= NUM_MAX; i++)
- {
- if(narcissus(i))
- {
- printf("%d\n", i);
- }
- }
-
- return 0;
- }
复制代码
第二个
- #include <stdio.h>
- #define red 1
- #define yellow 2
- #define blue 3
- #define BALL_TOTAL 12 //一共有12个球
- #define ONCE_BALL 8 // 一次摸8个球
- void change_p(int p[]);
- void my_printf(int arr[], int p[]);
- int main(void)
- {
- int arr[BALL_TOTAL] = {red, red, red, yellow, yellow, yellow, blue, blue, blue,
- blue, blue, blue
- };
- int p[ONCE_BALL] = {0, 1, 2, 3, 4, 5, 6, 7};
-
- while( !(p[0] > BALL_TOTAL - ONCE_BALL) )
- {
- printf("%d, %d, %d, %d, %d, %d, %d, %d\n", p[0], p[1], p[2], p[3], p[4],\
- p[5], p[6], p[7]); // 这个输出是调试用的,为了看起来方便,就留下了
-
- my_printf(arr, p);
-
- change_p(p);
- }
-
-
- return 0;
- }
- void my_printf(int arr[], int p[])
- {
- int i = 0;
- char *str[] = {"红", "黄", "蓝"};
-
- while(i < ONCE_BALL)
- {
- switch(arr[ p[i] ])
- {
- case red:
- printf("%s,", str[0]);
- break;
-
- case yellow:
- printf("%s,", str[1]);
- break;
-
- case blue:
- printf("%s,", str[2]);
- break;
-
- default:
-
- while(1);
- }
-
- i++;
- }
- printf("\n");
- }
- void reset_p_i_end(int p[], int i)
- {
- while( !(i + 1 > ONCE_BALL - 1) )
- {
- p[i + 1] = p[i] + 1;
- i++;
- }
- }
- void change_p(int p[])
- {
- int i = ONCE_BALL - 1;
-
- while(i >= 0)
- {
- p[i]++;
- reset_p_i_end(p, i); //复位i之后的所有值
- if( !(p[i] > (BALL_TOTAL - 1) - ( ONCE_BALL - (i + 1) )) )
- {
- return;
- }
- i--;
- }
- }
复制代码
|
|