代码如下:
#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)
}
}