ACMclub2022夏令营b005-b007作业题解

2022夏令营-作业05

7-1 比大小

小明正在编写一个计算机比大小游戏,计算机先放一个预置整数m,用户再输入一个数n,需要你编写程序将此数n与预置数m相比较,并给出比较结果。

输入格式:

在一行中输入两个整数m和n,以空格分隔。

输出格式:

在一行中输出比较的结果,分别为“Same!”、“Big!”、“Small!”。

解题思路:

照着题目说的做,用if-else分支结构即可;

参考答案:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int m,n;
    cin>>m>>n;
    if(n>m)
        cout<<"Big!";
    else if(n==m)
        cout<<"Same!";
    else
        cout<<"Small!";
    return 0;
}

7-2 分段函数

按照要求计算下列分段函数y的值。

输入格式:

在一行中给出整数x。

输出格式:

在一行中按“y=result”的格式输出,其中result计算结果。结尾有换行。

解题思路:

依旧是熟练运用if-else分支;

参考答案:

#include<bits/stdc++.h>
using namespace std;
​
int main(){
    int x;
    cin>>x;
    int ans;
    if(x<2)
       ans = 2*x-1;
    else if(x>=2&&x<10)
       ans = 4*x-5;
    else
       ans = 3*x+5;
    cout<<"y="<<ans<<endl;
    return 0;
}

7-3 苹果和虫子

你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

输入格式:

输入仅一行,包括n,x和y(均为整数)。输入数据保证y<=n*x。

输出格式:

输出也仅一行,剩下的苹果个数。

解题思路:

如果经过的y小时可以整除虫子吃一个苹果花的x小时,就有虫子刚好吃完整数个苹果,用n-y/x就行;否则,就是n-y/x-1;

参考答案:

#include<bits/stdc++.h>
using namespace std;
​
int main(){
    int n,x,y;
    cin>>n>>x>>y;
    int ans = n;
    if(y%x!=0)
        ans -= y/x+1;
    else
        ans -= y/x;
    cout<<ans;
    return 0;
}

7-4 判断能否被3,5,7整除

给定一个整数,判断它能否被3,5,7整除,并输出以下信息: 1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格); 2、只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者 3 7或者5 7,中间用空格分隔); 3、只能被其中一个数整除(输出这个除数); 4、不能被任何数整除,输出NO。

输入

输入一行,包括一个整数。

输出

输出一行,按照描述要求给出整数被3,5,7整除的情况。

解题思路:

题目的要求很明显,解法有多种,目的都是在于写的分支越少越好;我采用的是分别对3,5,7整除判断,逐个输出的方式;

参考答案:

#include<bits/stdc++.h>
using namespace std;
​
int main(){
    int num ;
    cin>>num;
    int flag=0;
    if(num%3==0)
        if(flag)cout<<" 3";
        else{ cout<<"3";flag++;}
    if(num%5==0)
        if(flag)cout<<" 5";
        else{ cout<<"5";flag++;}
    if(num%7==0)
        if(flag)cout<<" 7";
        else{ cout<<"7";flag++;}
    if(!flag)cout<<"NO";
    return 0;
}

7-5 骑车与走路

在大学校园里,没有自行车上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。

输入

输入一行,包含一个整数,表示一次办事要行走的距离,单位为米。

输出

输出一行,如果骑车快,输出一行"Bike"; 如果走路快,输出一行"Walk"; 如果一样快,输出一行"All"。

解题思路:

分别算出两个时间,再进行比较即可;

参考答案:

#include<bits/stdc++.h>
using namespace std;
int main(){
    double length;
    cin>>length;
    double bike = 50+length/3;
    double walk = length/1.2;
    if(bike<walk)
        cout<<"Bike";
    else if(bike>walk)
        cout<<"Walk";
    else
        cout<<"All";
    return 0;
}

7-6

编写程序实现如下功能: 判断三条边是否构成三角形。 已知构成三角形的条件是: 三边的边长必须是正数, 并且任意 两边的长度和大于第三边的长度。

输入格式:

在一行输入三个正整数(用空格分隔),分别代表三角形的三条边。

输出格式:

如果可以构成三角形,则输出“Y ”; 如果不可以构成三角形,则输出“N”; 如果三 边长度中有小于 0 或等于 0 的情况,则直接输出“ F”。

解题思路:

照着题目做,运用if-else分支结构;

参考答案:

#include<bits/stdc++.h>
using namespace std;
​
int main(){
    int l1,l2,l3;
    cin>>l1>>l2>>l3;
    
    if(l1<=0||l2<=0||l3<=0)
        cout<<"F";
    else if(l1+l2>l3&&l1+l3>l2&&l2+l3>l1)
        cout<<"Y";
    else
        cout<<"N";
        
    
    return 0;
}

7-7

给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。

输入格式:

输入在一行中给出一个华氏温度。

输出格式:

在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。

解题思路:

直接照着做,公式已经给了;

参考答案:

#include<bits/stdc++.h>
using namespace std;
​
int main(){
   int f;
   cin>>f;
   int c = 5*(f-32)/9;
   
   cout<<"Celsius = "<<c;
    return 0;
}

7-8

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式:

输入在一行中给出某用户的月用电量(单位:千瓦时)。

输出格式:

在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。

解题思路:

if-else分支,针对不同的价格给出结果;

参考答案:

#include<bits/stdc++.h>
using namespace std;
​
int main(){
    int x;
    cin>>x;
    double ans=0;
    if(x<=50&&x>=0)
        ans = x*0.53;
    else if(x<0){
        cout<<"Invalid Value!";
        return 0;
    }else
        ans = 50*0.53+0.58*(x-50);
    
    printf("cost = %.2f",ans);
    return 0;
}

7-9

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

输入格式:

输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。

输出格式:

在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

解题思路:

可以利用scanf的特性直接分别得到起始的小时与分钟,以及结束的时间点;以此来快速算出旅途所花时间;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int s1,s2,e1,e2;
    scanf("%2d%2d",&s1,&s2);
    scanf("%2d%2d",&e1,&e2);
    
    int h = e1 - s1;
    int min = e2 - s2;
    if(min<0){
        min+=60;
        h--;
    }
    printf("%02d:%02d",h,min);
    return 0;
}

7-10

输入一个四则运算表达式,输出运算结果,要求对除数为0的情况作特别处理。题目保证输入与输出均在双精度范围内。

输入格式:

输入在一行中依次输入操作数1、运算符、操作数2,其间没有空格,操作数的数据类型为实型。

输出格式:

在一行中输出表达式的运算结果,保留两位小数。 如果除法分母为0,则输出错误信息“Divisor can not be 0!”;如果输入了除加减乘除以外的非法运算符,则输出错误信息“Unknown operator!”。

解题思路:

1、同样,根据题目条件写好if-else结构的判断即可; 2、也可以巧妙运用switch语句,让代码更简练;注意一定要有break,不然会把其他分支语句也执行了,直到遇到break为止;

参考答案:

#include<bits/stdc++.h> 
using namespace std;
int main()
{
	double a,b;
	char c;
	scanf("%lf%c%lf",&a,&c,&b);
	switch(c)
	{
		case '+':printf("%.2f",a+b);break;
		case '-':printf("%.2f",a-b);break;
		case '*':printf("%.2f",a*b);break;
		case '/':
		if(b) printf("%.2f",a/b);
		else printf("Divisor can not be 0!");
		break;
		default :printf("Unknown operator!");
	}
}
#include <bits/stdc++.h>
using namespace std;

int main()
{
    float a,b;
	char x;
	cin>>a;
    x=getchar();
    cin>>b;
	if(x=='+')
	{
		printf("%.2f\n",a+b); 
	}
	else if(x=='-')
	{
		printf("%.2f\n",a-b);
	}
	else if(x=='*')
	{
		printf("%.2f\n",a*b);
	}
	else if(x=='/')
	{
		if(b!=0)
		printf("%.2f\n",a/b);
		else
		cout<<"Divisor can not be 0!"<<endl;
	}
	else
	{
		cout<<"Unknown operator!"<<endl;
	}
    return 0;
}

7-11

本题要求编写程序,输入10个字符,统计其中英文字母、数字字符和其他字符的个数。

输入格式:

输入为10个字符。最后一个回车表示输入结束,不算在内。

输出格式:

在一行内按照 letter = 英文字母个数, digit = 数字字符个数, other = 其他字符个数 的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

解题思路:

照着做;(注意,因为会输入空格之类的字符,所以不要用cin)

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    char ch;
    int l = 0,d = 0,o = 0,flag = 0;
    while(1){
        if(++flag>10)break;
        ch=getchar();
        if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))l++;
        else if(ch>='0'&&ch<='9')d++;
        else o++;
    }
    printf("letter = %d, digit = %d, other = %d",l,d,o);
    
    return 0;
}

2022夏令营-作业06

7-1

高斯在小时候很顽皮,但是也显示出极高的天赋。 有一次放学后,因为全班同学整队时纪律不好,集体被老师留在教室里罚写作业。 老师要求所有同学完成从1至100的加法后才可返学离开,高斯很快写出了答案5050后离开学校了。但是他的小伙伴可就没这么幸运了,老老实实的做加法。 现在请你帮助高斯的同学们,编写一个程序,来计算表达式1+2+3+...+100的值并输出。

输入格式:

本题无输入

输出格式:

在一行中输出1+2+3+...+100的值。

思路:

写一个循环即可; 希望营员不要学我直接输出答案,不推荐,初学还是去写循环体会一下,这才是这道题的初衷;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    cout<<"5050";
    return 0;
}

7-2

本题给出整数区间[a,b],请计算并输出从a至b区间内所有的整数的和,题目保证运算结果在整数范围内。

输入格式:

在一行中给出2个整数a和b(a<b)。

输出格式:

在一行中输出从a累加到b和值。

思路:

第一天作业的原题,学习通第一天的视频课里也有讲;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int a,b;
    cin>>a>>b;
    int ans=0;
    for(int i=a;i<=b;i++){
        ans+=i;
    }
    cout<<ans;
    return 0;
}

7-3

本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

思路:

循环想加;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    double ans = 0;
    for(int i=1;i<=n;i++)
        ans+=1.0/i;//注意是1.0,而不是1,不然会损失精度
    printf("sum = %.6f",ans);
    return 0;
}

7-4

本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

思路:

循环想加;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    double ans = 0;
    for(int i=1;i<=n;i++)
        ans+=1.0/(2*i-1);
    printf("sum = %.6f",ans);
    return 0;
}

7-5

本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。

思路:

循环想加,定义一个flag作为符号;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    double ans = 0;
    int flag = 1;
    for(int i=1;i<=n;i++){
        ans+=flag*(1.0/((i-1)*3+1));//分母是等差数列
        flag*=-1;
    }
    printf("sum = %.3f",ans);
    return 0;
}

7-6

本题要求对两个正整数mnmn)编写程序,计算序列和m_2+1/m+(m+1)2+1/(m+1)+⋯+n_2+1/n

输入格式:

输入在一行中给出两个正整数mnmn),其间以空格分开。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

思路:

换汤不换药

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int m,n;
    cin>>m>>n;
    double ans = 0;
    
    for(int i=m;i<=n;i++){
        ans+=i*i+1.0/i;//浮点数加整数,结果为浮点数
    }
    printf("sum = %.6f",ans);
    return 0;
}

7-7

本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出部分和的值,结果保留三位小数。

思路:

换汤不换药,和前面的题一样的套路,一通百通;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    double ans = 0;
    int flag = 1;
    for(int i=1;i<=n;i++){
        ans+=(double)i/(2*i-1)*flag;//需求的答案为实数,所以强转为double类型
        flag*=-1;
    }
    printf("%.3f",ans);
    return 0;
}

7-8

有一分数序列:

求出这个数列前n项之和。

输入

在一行中输入一个整数n。

输出格式:

数列前n项之和,精度为小数点后4位。

思路:

找到规律即可,与前面的题一样循环相加;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    double ans = 0;
    int a=2,b=1; 
    for(int i=1;i<=n;i++){
        ans+=(double)a/b;
        int temp = b;
        b = a;
        a = temp + b;
    }
    printf("%.4f",ans);
    return 0;
}

7-9

编写程序,求自然数1至n(n>1)的累乘积(即阶乘)。其中n的值从键盘输入(n<=12)。

输入格式:

输入一个正整数。

输出格式:

输出一个正整数,最后换行。

思路:

运用循环相乘即可;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    int ans = 1;
    for(int i = 2;i <= n;i++)
        ans*=i;
    cout<<ans;
    return 0;
}

7-10

输入一个自然数,拆分成两个非负整数的和,输出所有组合

输入格式:

输入一个自然数

输出格式:

拆分成两个非负整数的和,输出所有可能的两个数相加的表达式

思路:

循环遍历到n/2为止;

参考答案:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    
    for(int i = 0;i<=n/2;i++){
        printf("%d+%d=%d\n",i,n-i,n);
}
    return 0;
}

2022夏令营-作业07

7-1

本题要求计算给定的一系列正整数中奇数的和。

输入格式:

输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

输出格式:

在一行中输出正整数序列中奇数的和。

参考答案:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int sum=0,a;
	while(cin>>a)
	{
        if(a<=0) break;
		if(a&1) sum+=a;//奇数的二进制第一位为1
	}
	cout<<sum;
}

7-2

对于给定的正整数N,求它的位数及其各位数字之和。

输入格式:

输入在一行中给出一个不超过109的正整数N。

输出格式:

在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

思路:

1.可以采用读入数字,然后不断%10,/10的方法得到各个位置的数字 2.可采用string,更方便

参考答案:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	string a;
	cin>>a;
	int ans=0;
	for(int i=0;i<a.length();i++)
	{
		ans+=a[i]-'0';
	}
	cout<<a.length()<<" "<<ans;
}

7-3

本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:

输入在一行中给出两个正整数M和N(≤1000)。

输出格式:

在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

思路:

由数学结论:两个数的最小公倍数和最大公约数的乘积 就是 这两个数的乘积(mn=xy),所以我们得到最大公约数就知道了最小公倍数S 补充:_gcd是<algorithm>的库函数;也可以自行实现gcd函数,采用辗转相除法;

参考答案:

#include <bits/stdc++.h>
using namespace std;
//辗转相除法求gcd
//int gcd(int number1, int number2) {
// if (number2 == 0) {
//    return number1;
//  } else {
//    return gcd(number2, number1 % number2);
//  }
//}
int main()
{
	int a,b;
	cin>>a>>b;
	cout<<__gcd(a,b)<<" "<<a*b/__gcd(a,b);
}

7-4

本题要求统计给定整数MN区间内素数的个数并对它们求和。

输入格式:

输入在一行中给出两个正整数MN(1≤MN≤500)。

输出格式:

在一行中顺序输出MN区间内素数的个数以及它们的和,数字间以空格分隔。

思路:

循环判断素数

参考答案:

#include <bits/stdc++.h>
using namespace std;
int main ()
{
    int sum=0,m,n,cont=0;
    int j = 2;
    cin>>m>>n;
        for(int i=m;i<=n;i++)
        {
             for(j=2;j<=i/2;j++){
                if(i%j==0)break;
             }
            if(j>i/2&&i>=2){
                cont++;
                sum=sum+i;
               }
        }
    cout<<cont<<" "<<sum;
    return 0;
    }

7-5

猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。

输入格式:

输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。

输出格式:

在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。

思路:

模拟;

参考答案:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,n,cnt;
	cin>>a>>n;
	for(cnt=1;cnt<=n;cnt++)
	{
		cin>>b;
		if(b<0) {cout<<"Game Over"; return 0;}
		if(b>a) cout<<"Too big"<<endl;
		else if(b<a) cout<<"Too small"<<endl;
		else break;
	}
	if(cnt==1) {cout<<"Bingo!";}
	else if(cnt<=3) {cout<<"Lucky You!";}
	else if(cnt<=n) {cout<<"Good Guess!";}
	else {cout<<"Game Over";}
}

7-6

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

输入格式:

输入在一行中给出一个不超过10000的正整数N

输出格式:

在一行中输出兔子总数达到N最少需要的月数。

思路:

定义cnt记录月数,利用a、b、c三个变量进行迭代;c代表当前月的兔子数,b代表下个月将诞生的兔子,a代表两个月后将诞生的兔子;

参考答案:

#include <bits/stdc++.h>
using namespace std;
int n,a=1,b,c,cnt; //此时数据处在的月份可以认为是在-1月;
int main()
{
	cin>>n;
	while(c<n)
	{
		cnt++;
		c+=b;
		b=a;
		a=c;
	}
	cout<<cnt-1;
}

7-7

皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:

输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。

输出格式:

在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

思路:

依旧利用循环遍历的手段;

参考答案:

#include <bits/stdc++.h>

using namespace std;

int main ()
{
    int n;
    double h;
    cin>>h>>n;
    if(h==0||n==0){ printf("0.0 0.0");return 0;}
    //if(n==0){ printf("0.0 %.1f",h);return 0;}
    
    double nlength = h,length = h;
    
    for(int i=2;i<=n;i++){
        length += nlength;
        nlength *= 1.0/2;
    }
    nlength *= 1.0/2;
    printf("%.1f %.1f",length,nlength);
}

7-8

下面是一个完整的下三角九九口诀表:

本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。

输入格式:

输入在一行中给出一个正整数N(1≤N≤9)。

输出格式:

输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

思路:

1.面向答案编程 2.也可以老老实实的用循环,思路参考前几天做过的那道输出三角形,用二重循环;

参考答案:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	string a[]={
	"1*1=1   ",
	"1*2=2   2*2=4   ",
	"1*3=3   2*3=6   3*3=9   ",
	"1*4=4   2*4=8   3*4=12  4*4=16  ", 
	"1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  ", 
	"1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  ", 
	"1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  ", 
	"1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  ", 
	"1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  " 
	};
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cout<<a[i]<<endl;
	}
}  

7-9

某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。如果想用n人正好搬n块砖,问有多少种搬法?

输入格式:

输入在一行中给出一个正整数n。

输出格式:

输出在每一行显示一种方案,按照"men = cnt_m, women = cnt_w, child = cnt_c"的格式,输出男人的数量cnt_m,女人的数量cnt_w,小孩的数量cnt_c。请注意,等号的两侧各有一个空格,逗号的后面也有一个空格。 如果找不到符合条件的方案,则输出"None"

思路:

三重循环枚举即可;

参考答案:

#include <bits/stdc++.h>
using namespace std;
bool flag;
int main()
{
	int n;
	cin>>n;
	for(int men=0;men<=n/3;men++)
	{
		for(int women=0;women<=n/2;women++)
		{
			for(int child=0;child<=2*n;child+=2)
			{
				if(men*3+women*2+child/2==n&&men+women+child==n)
				{
					printf("men = %d, women = %d, child = %d\n",men,women,child);
					flag=true;
				}
			}
		}
	}
	if(!flag)
	{
		cout<<"None";
	}
    return 0;
}  

7-10

本题要求编写程序,计算序列部分和 4∗(1−1/3+1/5−1/7+...) ,直到最后一项的绝对值小于给定精度eps。

输入格式:

输入在一行中给出一个正实数eps。

输出格式:

在一行中按照“Pi = pi”的格式输出部分和的值pi,精确到小数点后四位。题目保证输入数据和计算结果均不超过双精度范围。

思路:

跟作业06的循环题很像,换成while循环设定好边界条件即可;

参考答案:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	double eps,ans=0,i=1,flag=1;
	cin>>eps;
	while(1/i>=eps)
	{
		ans+=4*flag/i;
		flag*=-1;
		i+=2;
	}
	ans+=4*flag/i;
	printf("Pi = %.4f",ans);
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值