C语言题目。蜘蛛有8条腿,没有翅膀。蜻蜓有6条腿和2对翅膀。蝉有6条腿和2对翅膀。现在这三种小虫共

Python020

C语言题目。蜘蛛有8条腿,没有翅膀。蜻蜓有6条腿和2对翅膀。蝉有6条腿和2对翅膀。现在这三种小虫共,第1张

这题无解,20对翅膀说明蜻蜓和蝉加起来一共10只,而它们都是各有6条腿,所以这就已经120条腿了,跟题目矛盾了。

代码如下:

#include<stdio.h>

int main()

{

int i, j, k, flag=0

for (i = 1i <= 16i++) {

for (j = 1j <= 17-ij++) {

k = 18 - j - i

if ((i * 8 + j * 6 + k * 6 == 118) &&(j * 2 + k * 2 == 20)) {

flag = 1

break

}

}

if (flag == 1) {

printf("蜘蛛有%d只,蜻蜓有%d只,蝉有%d只。", i, j, k)

break

}

}

return 0

}

1-52都做过基数了,翻牌的时候不用把基数也翻了吧?要是把基数也翻了,肯定不会有正面向上的牌啊....

以数组模拟卡片 TRUE向上 FALSE向下

循环模拟翻卡片 满足条件 card[i]=!card[i]

最后输出值为TRUE的数组元素

#include <stdio.h>

#include <string.h>

int main()

{

bool card[52]

memset(card,true,52)

for (int i=2,n=1i<=52i++,n++)

{

for(int j=nj<52j++)

{

if((j+1)%i==0) card[j]=!card[j]

}

}

for(int i=0i<52i++)

if(card[i]) printf("%d ",i+1)

return 0

}

改进 根据题意的翻牌规则 即求约数的过程 一个数的约数如果去掉1 包含自身的个数为奇数 即被翻了奇数次 向下,反之则向上。

#include <stdio.h>

int main()

{

printf("1 ")

for(int i=4i<=52i++)

{

int count=0

for(int j=2j<=i/2j++)

{

if(i%j==0) count++

}

if(count%2!=0) printf("%d ",i)

}

return 0

}

可见 在循环上节省了循环次数 而且去掉了申请CARD的空间 只需要一个count变量即可