放鞭炮 问题 求 修改
// 96页 9.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{//三人同时放鞭炮,甲每隔A秒放一次,乙每隔B秒放一次,丙每隔C秒放一次,他们各放D个,对任意给定的A,B,C和D。求能听到多少声鞭炮声。
int n,a,b,c;
int z,y;
printf("请输入三人放的鞭炮数:");
scanf("%d",&n);
printf("请分别输入三个人放的时间差:");
scanf("%d%d%d",&a,&b,&c);
if(a==b&&c==b&&a==c)
{
z = n;
printf("能听到的鞭炮声:%d\n",z);
}
else
{
for(int i = 0;i <= (n-1) * a;i = i + a)
{
for(int j = 0;j <= (n-1) * b;j = j + b)
{
for(int m = 0;m <= (n-1) * c;m = m + c)
{
if(a*i==b*j&&c*m==b*j&&a*i==c*m)
y++;
}
}
}
z = 3*n-y;
printf("能听到的鞭炮声:%d\n",z);
}
return 0;
}
出问题了 求解答
[解决办法]
方法一:
//#include "stdafx.h"
#include<stdio.h>
int main()
{//三人同时放鞭炮,甲每隔A秒放一次,乙每隔B秒放一次,丙每隔C秒放一次,他们各放D个,对任意给定的A,B,C和D。求能听到多少声鞭炮声。
int n,a,b,c;
int z,y;
printf("请输入三人放的鞭炮数:");
scanf("%d",&n);
printf("请分别输入三个人放的时间差:");
scanf("%d%d%d",&a,&b,&c);
if(a==b&&c==b&&a==c)
{
z = n;
printf("能听到的鞭炮声:%d\n",z);
}
else
{
y = 0;
int count = 0;
for(int i = 0;i <= n-1;i++)
{
for(int j = 0;j <= n-1 ; j++)
{
for(int m = 0;m <= n-1; m++)
{
if(a*i==b*j&&c*m==b*j)//3人同时
{
y += 2;
}
else if(a*i==b*j && 0==m)//a,b人同时
{
y++;
}
else if(c*m==b*j && 0 == i)//b,c同时
{
y++;
}
else if(a*i==c*m && 0 == j)//a,c同时
{
y++;
}
}
}
}
z = 3*n-y;
printf("能听到的鞭炮声:%d\n",z);
}
return 0;
}
方法二:
#include<stdio.h>
#include <malloc.h>
#include <string.h>
int max(int a,int b,int c)
{
int m = a;
if(b>m)
{
m = b;
}
if(c > m)
{
m = c;
}
return m;
}
int main()
{//三人同时放鞭炮,甲每隔A秒放一次,乙每隔B秒放一次,丙每隔C秒放一次,他们各放D个,对任意给定的A,B,C和D。求能听到多少声鞭炮声。
int n,a,b,c;
int z,y,len;
printf("请输入三人放的鞭炮数:");
scanf("%d",&n);
printf("请分别输入三个人放的时间差:");
scanf("%d%d%d",&a,&b,&c);
len = n*max(a,b,c);
char *pFlag = (char*)malloc(len);
memset(pFlag,0,len);
if(a==b&&c==b&&a==c)
{
z = n;
printf("能听到的鞭炮声:%d\n",z);
}
else
{
z = 0;
for(int i = 0;i < n;i++)
{
pFlag[i*a] = 1;
pFlag[i*b] = 1;
pFlag[i*c] = 1;
}
for(int i = 0;i < len;i++)
{
if(pFlag[i])
{
z++;
}
}
printf("能听到的鞭炮声:%d\n",z);
}
free(pFlag);
return 0;
}
[解决办法]
可以使用bitmap,假如放炮的总时间为100秒就设置100个bit,把放炮的时间映射到相应的bit位