编程鸣礼炮
#include <stdio.h>
int main()
{
int n=0, t;
for (t=0; t<=20*7; t++)
{
if(t%5==0 && t<=20*5)
{
n++;
continue;
}
if(t%6==0 && t<=20*6)
{
n++;
continue;
}
if(t%7==0)
{
n++;
}
if(t % 5 == 0 && t % 6 == 0 && t % 7 ==0
|| t % 5 == 0 && t % 6 == 0
||t % 6 == 0 && t % 7 ==0
||t % 5 == 0 && t % 7 ==0 ) // 这里要排除同时响的
{
n--;
}
}
printf("n=%d\n", n);
return 0;
}
B. c语言,海军节上的鸣炮声计算问题,答案错了一部分(百分之六十),求在我的程序上改错,谢了!!!
/*关于容斥原理的题*/
#include<stdio.h>
intgcd(inta,intb){
if(a<b){
inttemp=a;
a=b;
b=temp;
}
intc=a%b;
while(c){
a=b;
b=c;
c=a%b;
}
returnb;
}
intmain(){
inta,b,c,n,ans;
scanf("%d%d%d%d",&n,&a,&b,&c);
ans=n/a+n/b+n/c;
ans-=n/(a*b/gcd(a,b))+n/(b*c/gcd(b,c))+n/(a*c/gcd(a,c));
ans+=n/(a*b*c/(gcd(gcd(a,b),c)));
printf("%d ",ans);
return0;
}
C. 用C语言计算听到的礼炮声 哎呦喂 这哪是编程啊 这比数学还难。。求指教
#include"stdio.h"
intmain()
{
intn,a,b,c;
intta,tb,tc,na,va,vb,vc;
scanf("%d%d%d%d",&n,&a,&b,&c);
ta=n*a; //a鸣n次用的总时间
tb=n*b; //b鸣n次用的总时间
tc=n*c; //c鸣n次用的总时间
na=n*3; //没有重复时,观众会听到的次数
va=a;
vb=b;
vc=c;
//是否会一起鸣炮
if(a==b==c)
{
printf("%d ",n);
return0;
na=na-2;
}
elseif(a==b||a==c||b==c)
na--;
//这个循环模拟,鸣炮的过程,若有abc一起鸣,则na减2,若有两个一起鸣,则na减1
while(1)
{
if(a<ta&&b<tb&&c<tc)
{
if(a<=b&&a<=c)
{
a+=va;
if(a==b==c)
na--;
elseif(a==b||a==c)
na--;
}
elseif(b<=a&&b<=c)
{
b+=vb;
if(a==b==c)
na--;
elseif(b==a||b==c)
na--;
}
elseif(c<=a&&c<=b)
{
c+=vc;
if(a==b==c)
na--;
elseif(c==a||c==b)
na--;
}
}
elseif(a<ta&&b<tb)
{
if(a<=b)
{
a+=va;
if(a==b)
na--;
}else{
b+=vb;
if(a==b)
na--;
}
}
elseif(a<ta&&c<tc)
{
if(a<=c)
{
a+=va;
if(a==c)
na--;
}else{
c+=vc;
if(a==c)
na--;
}
}
elseif(b<tb&&c<tc)
{
if(c<=b)
{
c+=vc;
if(c==b)
na--;
}else{
b+=vb;
if(c==b)
na--;
}
}
else
break;
}
printf("%d ",na);
return0;
}
D. 要求用C语言编程解决下面问题:在庆祝活动中,A,B,C三条军舰要同时开始鸣放礼炮各21响
和你说下思路吧。
---------------------------------------------
因为C舰要7秒放一次,所以最后一响一定是C舰的。即最后一响是在第140秒。
所以开一个大小超过140的数组并将所有内容初始化为0,然后分别隔5、6、7编号对数组的对应内容进行+1操作。
三次遍历之后,第四次遍历统计不为0的元素个数,然后输出就OK
E. c语言 海军鸣炮
利用最小公倍数能够求出重叠的炮声,然后用总的炮声减去即可。
具体代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
intLcm(inta,intb);
main()
{
intst;//重叠的炮声
st=5*21/Lcm(5,6)+6*21/Lcm(6,7)+5*21/Lcm(5,7);//利用最小公倍数求重叠的炮声
printf("n=%d",21*3-st);
system("pause");
}
//函数功能:输出两个数的最小公倍数
intLcm(inta,intb)
{
inti;
for(i=a;i<=a*b;i++)
{
if(i%a==0&&i%b==0)
break;
}
returni;
}
F. 要求用C语言编程解决下面问题:
贫道花了半小时亲自写的啊,亲,虽然算法不是最优,但简单……
/************************************************************
// CJ_Studio
// 2013/1/6
**************************************************************/
#include <stdio.h>
#define N 21
int main()
{
int A[N],B[N],C[N],S[3*N],i,j,sn=N,snb;
for(i=0;i<N;i++)
{
S[i]=A[i]=5*i;
B[i]=6*i;
C[i]=7*i;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(B[i]==S[j])break;
}
if(j==N){S[j]=B[i];sn++;}
}
snb=sn;
for(i=0;i<N;i++)
{
for(j=0;j<snb;j++)
{
if(C[i]==S[j])break;
}
if(j==snb){S[j]=C[i];sn++;}
}
printf("%d\n",sn);
return 0;
}
G. 急!C语言编程题!
#include<stdio.h>
void main()
{
int time=1,count=0;
for(;time<141;time++)
if((time%5==0&&time%6==0)||(time%7==0&&time%5==0)||(time%7==0&&time%6==0))
//原来的答案是按照105秒来计算的,错误!
count++;
count+=2; //一开始应该是time=0减去两个,所以应该cout加上2
printf("所应该减去的次数%d\n",count);
count=63-count;
printf("可以听到的次数=%d",count);
//结果为五十,已经通过数学方法验证,不是五十四次!
}
H. c言语编程问题.(设计题目)
1.
#include <stdio.h>
int issquare(int n){
int i=0;
while(i*i<=n){
if(i*i==n) return 1;
else i++;
}
if(i*i>n) return 0;
}
int main(){
int a,b,c,d;
for(a=0;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
for(d=0;d<10;d++){
if(a==b&&c==d&&a!=c&&issquare(a*1000+b*100+c*10+d)) printf("%d%d%d%d\n",a,b,c,d);
}
return 0;
}
2.
#include <stdio.h>
void test(int n,int result[]){
int i,j,k,l;
for(i=0;i*i<=n;i++)
if(i*i==n){
result[0]=i;
return;
}
for(i=0;i*i<=n;i++)
for(j=0;j*j<=n;j++)
if(i*i+j*j==n){
result[0]=i;
result[1]=j;
return;
}
for(i=0;i*i<=n;i++)
for(j=0;j*j<=n;j++)
for(k=0;k*k<=n;k++)
if(i*i+j*j+k*k==n){
result[0]=i;
result[1]=j;
result[2]=k;
return;
}
for(i=0;i*i<=n;i++)
for(j=0;j*j<=n;j++)
for(k=0;k*k<=n;k++)
for(l=0;l*l<=n;l++){
if(i*i+j*j+k*k+l*l==n){
result[0]=i;
result[1]=j;
result[2]=k;
result[3]=l;
return;
}
}
}
int main(){
int n;
scanf("%d",&n);
int a[4]={-1,-1,-1,-1};
test(n,a);
int i;
for(i=0;i<4;i++)
if(a[i]!=-1) printf("%5d",a[i]);
printf("\n");
return 0;
}
3.
#include <stdio.h>
int isprime(int n){
int i;
for(i=2;i<n;i++)
if(n%i==0)return 0;
return 1;
}
int main(){
int n;
printf("Enter a positive even number between 0 and 2000: ");
scanf("%d",&n);
if(n<0||n>2000) printf("Illegal number\n");
else{
int i=3;
while(i<n){
if(isprime(i)&&isprime(n-i)) printf("%d=%d+%d\n",n,i,n-1);
else i++;
}
return 0;
}
4.
#include <stdio.h>
int main(){
int a=0,b=0,c=0,count=0;
while(a<=5*20||b<=6*20||c<=7*20){
if(a%5==0||b%6==0||c%7==0) count++;
if(a<=5*20)a++;
if(b<=6*20)b++;
if(c<=7*20)c++;
}
printf("%d\n",count);
return 0;
}
5.
#include <stdio.h>
#include <stdlib.h>
struct student{
float score;
struct student *next;
};
int main(){
struct student *s;
s=(struct student *)malloc(sizeof(struct student));;
struct student *t;
t=s;
float i,sum;
int total;
int a=0,b=0,c=0,d=0,e=0;
do{
scanf("%f",&i);
if(i<0) {
s->score=i;
s->next=0;
break;
}
else{
if(i<60) e++;
else if(i>=60&&i<70) d++;
else if(i>=70&&i<80) c++;
else if(i>=80&&i<90) b++;
else if(i>=90) a++;
total++;
sum=sum+i;
s->score=i;
s->next=(struct student *)malloc(sizeof(struct student));
s=s->next;
}
}while(1);
float ave=sum/total;
s=t;
int j=0;
while(s!=0){
if(s->score>ave) j++;
t=s;
s=s->next;
free(t);
}
printf("Number of failed students: %d\n",e);
printf("Number of students above average: %d\n",j);
printf("Percentage below 60: %f\%\n",e/total*100);
printf("Percentage for 60~70: %f\%\n",d/total*100);
printf("Percentage for 70~80: %f\%\n",c/total*100);
printf("Percentage for 80~90: %f\%\n",b/total*100);
printf("Percentage for above 90: %f\%\n",a/total*100);
return 0;
}
最后一个太无聊了,你自己查查对应的公式写就可以了。
}
I. C语言问题,,急!!!
VC6.0编译通过,思路是算出共有多少秒有炮响,统计出总数。再加上开始同同时鸣响的一炮。总炮数为54响。
void main()
{
int max=20*7;//算出时间段的长度
int cnt=1;//开始时三条船同时鸣的那一响
for(int i=4;i<=max;i++)
{
if(0==i%5&&i<=20*5) cnt++; //此处要注意,当间隔为5秒放完以后,cnt在此处就不能再增值了。
else if(0==i%6&&i<=20*6) cnt++; //此处要注意,当间隔为6秒放完以后,cnt在此处就不能再增值了。
else if(0==i%7) cnt++;
} //从第四秒开始,某一秒有炮响就让cnt加1
printf("礼炮数为:%d\n",cnt); //从而得出总的炮响数。
}
J. VB练习题礼炮问题
dimaasinteger,basinteger,casinteger
dimiasinteger,nasinteger
a=0:b=0:c=0:n=0
Fori=1to21
Ifa<>bAndb<>cAndc<>aThen
n=n+3
ELseIfa=bAndb=cAndc=aThen
n=n+1
Else
n=n+2
EndIf
a=a+5:b=b+6:c=c+7
Nexti
print"观众总共听到的礼炮声数:"&n