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

Python012

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变量即可

第一题没看懂啥意思!!!

第二题

#include <stdio.h>

void main()

{

int i,j,k

for(i=0i<=33i++)

for(j=0j<=50j++)

{

k=(100-3*i-2*j)*2

if(i+j+k==100)

printf("大马的数量:%d 中马的数量:%d 小马的数量:%d\n",i,j,k)

}

}

第三题

#include<stdio.h>

void main()

{

int a,b,c,d

for(a=0a<=14a++)

for(b=0b<=10b++)

for(c=0c<=19c++)

{

if(a+b+c==18&&8*a+6*b+6*c==118&&2*b+c==20)

{

printf("蜘蛛的数量:%4d 蜻蜓的数量%4d 蝉的数量%4d\n",a,b,c)

}

}

}

第四题

第一种方法

#include<stdio.h>

void main()

{

int i,g,s,b,m

for(i=100i<1000i++)

{

g=i%10

m=i/100

s=m/10

b=i/100

if(g==b)

printf("%4d",i)

}

printf("\n")

}

第二种方法

#include<stdio.h>

void main()

{

int i,j,k

for(i=1i<10i++)

for(j=0j<10j++)

for(k=0k<10k++)

{

if(i==k)

printf("%d%d%d\n",i,j,k)

}

}