首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

放鞭炮 有关问题 求 修改

2013-01-08 
放鞭炮 问题求 修改// 96页 9.cpp : 定义控制台应用程序的入口点。//#include stdafx.h#includestdio.h

放鞭炮 问题 求 修改
// 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位

热点排行