Python编程训练题2

Posted 以山河作礼。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python编程训练题2相关的知识,希望对你有一定的参考价值。

1.11
有 n 盏灯,编号 1~n(0<n<100)。第 1 个人把所有灯打开,第 2 个人按下所有编号为
2 的倍数的开关(这些灯将被关掉),第 3 个人按下所有编号为 3 的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依次类推。输入灯数和人数,输出开着的灯的编号。
比如输入:10 2 输出最后亮灯的编号:1,3,5,7,9 注意:使用循环语句实现。

n, x = input('请依次输入灯数和人数:').split(' ')
n = int(n)
x = int(x)
led = []
# 使输入的所有灯打开
for i in range(n + 1):
    led.append(1)
for i in range(2, x + 1):
    for j in range(i, n + 1, i):
        led[j] = -led[j]
for i in range(1, n + 1):
    if led[i] == 1:
        print(i, end=',')

1.12
冒泡排序、
原始数组:[1,9,3,7,4,2,5,0,6,8]
排序后:[0,1,2,3,4,5,6,7,8,9];
要求:综合使用分支、循环结构语句实现,直接输出结果不计分。打印每一次运行的结果

initial = [1, 9, 3, 7, 4, 2, 5, 0, 6, 8]  # 初始值
temp = 0  # 中间值转化
for i in range(len(initial)):
    for j in range(len(initial) - i-1):
        if initial[j] > initial[j + 1]:
            temp = initial[j]
            initial[j] = initial[j + 1]
            initial[j + 1] = temp
    print(f'第i+1轮变化结果:initial')

1.13
动物园饲养的食肉动物分大型动物和小型动物两类,规定老虎、狮子一类的大动物每次喂肉每头三斤,狐狸、山猫一类小动物每三头喂一斤。该动物园共有这两类动物 100 头,每
次需喂肉 100 斤,编程输出大、小动物的数量。

for big in range(1, 101):
    if 3 * big + 1 / 3 * (100 - big) == 100:
        print(f'大型动物big,小型动物100 - big')

1.14
从键盘接收一个整数 n(n>=4),请打印一个由“*”号组成的长度和宽度均为 n 的空心矩形。例如输入:4 你要在屏幕打印如下图形:

n = int(input('请输入一个整数n:'))
for i in range(n):
    for j in range(n):
        if i == 0 or j == 0 or i == n - 1 or j == n - 1:
            print('*', end='')
        else:
            print('', end=' ')
    print()

1.15
注意输出指定空心正方形。输入第一个数字为边长,第二个字符为组成图形边的字符。例如:输入
4 a (4为空心正方形的大小,a为显示的字符)
输出
aaaa
a a
a a
aaaa

n, char = input('请依次输入边长和字符:').split(' ')
n = int(n)
for i in range(n):
    for j in range(n):
        if i == 0 or j == 0 or i == n - 1 or j == n - 1:
            print(f'char', end='')
        else:
            print('', end=' ')
    print()

1.16
已知鸡和兔的总数量为 n,总腿数为 m。输入 n 和 m,依次输出鸡和兔的数目,如果无解, 则输出“No answer”(不要引号)

n, m = input('依次输入n,m:').split(' ')
n = int(n)
m = int(m)
rabbit = 0
f = True  # 判断答案是否存在
for rabbit in range(n + 1):
    if rabbit * 4 + (n - rabbit) * 2 == m:
        f = False
        print(f'兔的数量:rabbit,鸡的数量:n - rabbit')
if f:
    print('No answer')

1.17
中国古代的《算经》记载了这样一个问题:公鸡 5 文钱 1 只,母鸡 3 文钱 1 只,小鸡 1
文钱 3 只,如果用 100 文钱买 100 只鸡,那么公鸡、母鸡和小鸡各应该买多少只呢?现在请
你编程求出所有的解,每个解输出 3 个整数,打印在一行,用空格隔开,分别代表买的公鸡、母鸡、小鸡的数量。
注意:100 文钱要正好用完。请输出所有的解,每个解占一行。

cock, hen, chick = 0, 0, 0  # 公鸡,母鸡,小鸡
for cock in range(100):
    for hen in range(100):
        for chick in range(100):
            if cock + hen + chick == 100 and cock * 3 + hen * 1 + 1 / 3 * chick == 100:
                print(cock, hen, chick, sep=' ')


1.18
啤酒每罐 2.3 元,饮料每罐 1.9 元。小明买了若干啤酒和饮料,一共花了 82.3 元。我们还知道他买的啤酒比饮料的数量少,请你编程计算他买了几罐啤酒。

max_beer = int(82.3 / 2.3)
max_drink = int(82.3 / 1.9)
for beer in range(max_beer):
    for drink in range(max_drink):
        if beer * 2.3 + drink * 1.9 == 82.3 and beer < drink:
            print(beer)


1.9 折纸比高、
假设一张足够大的纸,纸张的厚度为 0.5 毫米。请问对折多少次以后,可以达到珠穆朗玛峰的高度(最新数据:8844.43 米)。请编写程序输出对折 次数。
注意:使用循环结构语句实现,直接输出结果不计分。

sum_height = 0.5
t = 0  # 折纸次数
while sum_height < 8844.43:
    sum_height *= 2
    t += 1
print(t-1)

1.20
职员小 A 今天犯了一个致命的错误,他一不小心丢失了 X 项目的市场调查结果只记得一个公式 xyz+yzz=532,其中 x、y、z 均为一位数,现在请你帮忙编写一个程序求出 x、y、z 分别代表什么数。

for x in range(10):
    for y in range(10):
        for z in range(10):
            if (x * 100 + y * 10 + z) + (y * 100 + z * 10 + z) == 532:
                print(x, y, z)

1.21
小明带两个妹妹参加元宵灯会。别人问她们多大了,她们调皮地说:“我们俩的年龄之积是年龄之和的 6 倍”。
小明又补充说:“她们可不是双胞胎,年龄差肯定也不超过 8 岁啊。” 请你编程求出小明的较小的

age_min = 0
age_max = 0
for age_min in range(1, 50):
    for age_max in range(1, 50):
        if age_min * age_max == (age_max + age_min) * 6 and 0 < age_max - age_min <= 8:
            print(age_min)

1.22
本月酒水的销售为 2!+4!+5!的值。n!表示 n 的阶乘,例如 3!=3×2×1=6,5!=5×4×3×2×1=120。求这个值

sum_num = 0
t = 1  # 计算每次循环的值
for i in range(1, 6):
    t *= i
    if i == 2:
        sum_num += t
    if i == 4:
        sum_num += t
    if i == 5:
        sum_num += t
print(sum_num)

1.23
分别输入两个字符串 s1 和 s2 ,请问 s1 中包含多少个 s2,如果没有则输出 0。要求:使用循环。

s1, s2 = input('按顺序输出字符串s1,s2:').split(' ')
t = 0  # 计数器
for i in range(len(s1) + 1):
    if s2 == s1[i:i + len(s2)]:
        t += 1
print(t)


1.24
小米打算把图标设计成下面这样,但是他不知道几层最合适,于是想写个程序,打印出不同层的图标,请你帮帮他。

———
—————
———————
注意:输入 n,打印 n 层高度的图标,如图是 4 层。

n = int(input('请输入n:'))
for i in range(n):
    for j in range(n - i):
        print(' ', end='')
    for j in range(1 + 2 * i):
        print('-', end='')
    print()

1.26
Lee 的老家住在工业区,日耗电量非常大。
今年 7 月,传来了不幸的消息,政府要在 7、8 月对该区进行拉闸限电。政府决定从 7
月 1 日起停电,然后隔一天到 7 月 3 日再停电,再隔两天到 7 月 6 日停电,依次下去,每次都比上一次长一天。
Lee 想知道自己到家后到底要经历多少天倒霉的停电。请编写程序帮他算一算。
注意:从键盘输入放假日期、开学日期,日期限定在 7、8 月份,且开学日期大于放假日期,然后在屏幕上输出停电天数。
提示:可以用数组标记停电的日期。

date7 = [f'7-i' for i in range(1, 32)]
date8 = [f'8-i' for i in range(1, 32)]
date_time = date7 + date8

date_dict = 
start = 0
s = 1
for index, i in enumerate(date_time):
    date_dict[i] = 0
    if start == index:
        date_dict[i] = 1
        s += 1
        start = start + s

print(date_dict)
date_list = list(date_dict.keys())

start_date = input('请输入开始的时间')
stop_date = input('请输入截至的时间')

start_index = date_list.index(start_date)
stop_index = date_list.index(stop_date)

power_cut = []
for i in range(start_index, stop_index + 1):
    if date_dict[date_list[i]] == 1:
        power_cut.append(date_list[i])

print(power_cut)
print(len(power_cut))

1.28
问题:使用给定的整数n,编写一个程序生成一个包含(i, i*i)的字典,该字典包含1到n之间的整数(两者都包含)。然后程序应该打印字典。
假设向程序提供以下输入:8
则输出为:
1:1,2:4,3:9,4:16,5:25,6:36,,7:49,8:64
提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。考虑使用dict类型()\\

n = int(input('请输入整数n:'))
dict_1 = 
for i in range(1, n + 1):
    dict_1[i] = i ** 2
print(dict_1)

1.29
编写一个接受句子的程序,并计算大写字母和小写字母的数量。
假设为程序提供了以下输入:
Hello world!
然后,输出应该是:
大写实例 1
小写实例 9

char = input('请输入字符串:')
small = 0
big = 0
for i in char:
    if i.isupper():
        big += 1
    elif i.islower():
        small += 1
print(f'大写实例 big')
print(f'小写实例 small')

悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。

C++编程基础题训练

1.编写一个c++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中

1.代码如下

#include <iostream>
using namespace std;

int main()
{
	int *a = new int[25];
	a[0] = 0;
	a[1] = 1;
	for (int i = 2; i <= 20; i++)
	{
		a[i] = a[i - 1] + a[i - 2];
	}
	for (int i = 0; i <= 20; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
	return 0;
}

2.代码如下:



#include<iostream>       

    using  namespace  std;

    int  main()

    {   int  *p,*q=new  int[20];                   //动态分配20个整型内存空间

         p=q;

         *p=1;

        *(p+1)=1;                              //对前面2个内存空间赋值1

        cout<<*p<<"\\t"<<*(p+1)<<"\\t";

        p=p+2;                                 //p指向第3个内存空间

        for  (int  i=3;i<=20;i++)

        {   *p=*(p-1)+*(p-2);

            cout<<*p<<"\\t";

            if  (i%5==0)  cout<<endl;

               p++;                           //p指向下一个内存空间;

        }

        return  0;

    }



2.编写一个c++风格的程序,建立一个被称为sroot()的函数,返回其函数的二次方根。重载函数sroot()3次,让它返回整数,长整数和双精度数的二次方根(计算二次方根是,可以使用标准库函数 sqrt()).

1.代码如下:

#include <iostream>
#include <cmath>
using namespace std;

double sroot(int a)
{
	return sqrt(1.0*a);
}

double sroot(long a)
{
	return sqrt(1.0*a);
}

double sroot(double a)
{
	return sqrt(1.0*a);
}

  int  main()

    {   int  i=12;

        long  l=1234;

        double  d=12.34;

        cout<<"i的二次方根是:"<<sroot(i)<<endl;

        cout<<"l的二次方根是:"<<sroot(l)<<endl;

        cout<<"d的二次方根是:"<<sroot(d)<<endl;

        return  0;

    }



3.编写一个C++风格的程序,解决百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?

1.代码如下:

#include <iostream>
using namespace std;


int main()
{
	int cnt = 0;
	for (int i = 0; i * 1 <= 100; i++)
		for (int j = 0; j * 2 + i * 1 <= 100; j++)
			for (int k = 0; k * 5 + j * 2 + i * 1 <= 100; k++)
			{
				if (i * 1 + j * 2 + k * 5 == 100) cnt++;
			}
	cout << cnt << endl;
	return 0;
}

2.代码如下:

#include<iostream>       

    using  namespace  std;

    int  main()

    {   int  i,j,sum=0;;

        for(i=0;i<=20;i++)

            for  (j=0;j<=50;j++)

               if  (100-5*i-2*j>=0)

               {   sum++;

                   cout<<100-5*i-2*j<<"\\t"<<j<<"\\t"<<i<<endl;

               }

        cout<<"sum  is  "<<sum<<endl;

        return  0;

    }

4.下面是一个计算器类的定义,请完成该类成员函数的实现。

class counter 

{

public:

	counter(int number);

	void increment();      //给原值加1

	void decrement();     //给原值减1

	int getvalue();       //取得计数器值

	int print();         //显示计数

private:

	int value;

};

1.代码如下:


#include <iostream>
using namespace std;

class counter

{

public:

	counter(int number) :value(number) {};

	void increment()
	{
		value++;
	}//给原值加1

	void decrement()
	{
		value--;
	}//给原值减1

	int getvalue()
	{
		return value;
	}//取得计数器值

	int print()
	{
		cout << "value = " << value << endl;
	}//显示计数

private:

	int value;

};

5.根据注释语向的提示,实现类Date的成员函数

#include<iostream>

using namespace std;

class Date

{

public:

	void printDate();         //显示日期

	void setDay(int d);       //设置日的值

	void setMonth(int m);    //设置月的值

	void setYear(int y);      //设置年的值

private:

	int day,month, year;

};

int main()

{	Date testDay;

	testDay.setDay(5);

	testDay.setMonth (10);

	testDay.setYear(2003);

	testDay.printDate();

	return 0;

}

1.代码如下:

#include<iostream>

using namespace std;

class Date

{

public:

	void printDate()
	{
		cout << "year = " << year << endl;
		cout << "month = " << month << endl;
		cout << "day = " << day << endl;
	}//显示日期

	void setDay(int d)
	{
		day = d;
	}//设置日的值

	void setMonth(int m)
	{
		month = m;
	}//设置月的值

	void setYear(int y)
	{
		year = y;
	}//设置年的值

private:

	int day, month, year;

};

int main()

{
	Date testDay;

	testDay.setDay(5);

	testDay.setMonth(10);

	testDay.setYear(2003);

	testDay.printDate();

	return 0;

}

6.建立cylinder,类cylinder的构造函数被传递了两个 double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并存储在一个 double变量中。在类cylinder包含一个成员函数vol(),用来显示每个 cylinder 对象的体积。

1.代码如下:

#include <iostream>
using namespace std;

const double PI = 3.1415926;


class cylinder
{
public:
	cylinder(double h, double r):h(h),r(r)
	{

	}
	void calV()
	{
		v = PI * r*r*h;
	}

	void vol()
	{
		cout << "v = " << v << endl;
	}

private:
	double h;
	double r;
	double v;
};

int main()
{
	cylinder c1(21.2, 2.3);
	c1.calV();
	c1.vol();
	return 0;
}

7.构建一个类Stock,含字符数组stockcode[]及整型数据成员 quantity,双精度型数据price。构造函数含3个参数,含字符数组na[]、q和p,当定义Stock的类对象时,将对象的第1个字符串参数赋给成员 stockcode,第2和第3个参数分別赋給 quantity和price。未设置第2和第3个参数时 ,quantity的值为1000,price的值为8.98。成员函数 print()没有形参,需使用this指针,显示对象为成员的内容。假设类Stock第1个对象的3个参数分別为"600001”,3000和5.67;第2个对象的第1个数据成员的值是"600001”,第2和第3个数据成员的值取默认值。编写程序分别显示对象数据成员的值。

1.代码如下:

#include <iostream>
#include <cstring>
#include <string>

using namespace std;
const int N = 200;

class Stock
{
public:

	Stock(const char na[], int q = 1000, double p = 8.98)
	{
		strcpy(stockcode, na);
		quantity = q;
		price = p;
	}

	void print()
	{
		cout << "stockcode = " << this->stockcode << endl;
		cout << "quantity = " << this->quantity << endl;
		cout << "price = " << this->price << endl;
	}

private:
	char stockcode[N];
	int quantity;
	double price;
};



int main()
{
	Stock s1("600001", 3000, 5.67);
	Stock s2("600001");
	s1.print();
	s2.print();
	return 0;
}

8.编写一个程序,已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据成员表示)。

1.代码如下:

#include <iostream>
#include <string>

using namespace std;

class Student
{
public:

	Student(string n, int hao, double g):name(n),xuehao(hao),grade(g)
	{
		studentNum++;
		gradeSum += g;
	}

	void print()
	{
		cout << "xuehao = " << xuehao << endl;
		cout << "name = " << name << endl;
		cout << "grade = " << grade << endl;
	}

	static void calNum()
	{
		cout <<"studentNum = "<< studentNum << endl;
	}

	static void averageGrade()
	{
		cout << 1.0*gradeSum / studentNum << endl;
	}

private:
	int xuehao;
	string name;
	double grade;
	static int studentNum;
	static double gradeSum;
};

int Student::studentNum = 0;
double Student::gradeSum = 0;


int main()
{
	Student s1("xiaom", 210, 340);
	Student s2("xiaol", 211, 450);
	Student s3("bibi", 212, 370);
	Student::calNum();
	Student::averageGrade();
	return 0;
}

9.编写一个有关股票的程序,其中有两个类:一个是深圳类shen_stock,另一个是上海类shang_stock。类中有三项私有数据成员:普通股票个数general、ST股票个数st和PT股票个数pt,每一个类分别有自己的友元函数来计算并显示深圳或上海的股票总数(三项的和)。两个类还共用一个count(),用来计算深圳和上海总共有多少股票并输出。

1.代码如下:

#include <iostream>
using namespace std;
class shang_stock;

class shen_stock
{
public:
	shen_stock(int a,int b,int c):general(a),st(b),pt(c){}

	friend void calSum_shen(shen_stock &);
	friend void calSum_two(shen_stock &, shang_stock &);
private:
	int general;
	int st;
	int pt;

};

void calSum_shen(shen_stock &p)
{
	cout << "stockNum_shen = "<<p.general + p.st + p.pt << endl;
}



class shang_stock
{
public:

	shang_stock(int a,int b,int c):general(a),st(b),pt(c){}

	friend void calSum_shang(shang_stock &);
	friend void calSum_two(shen_stock &, shang_stock &);
private:
	int general;
	int st;
	int pt;
};

void calSum_shang(shang_stock &p)
{
	cout <<"stockNum_shang = "<< p.general + p.pt + p.st << endl;
}

void calSum_two(shen_stock &a, shang_stock &b)
{
	cout << "shang and shen stockSum = "<<a.general + a.st + a.pt + b.general + b.pt + b.st << endl;
}

int main()
{
	shen_stock s1(12, 13, 14);
	shang_stock s2(7, 23, 12);
	calSum_shen(s1);
	calSum_shang(s2);
	calSum_two(s1, s2);
	return 0;
}

10.构建一个类Stock,含字符数组stockcode[]及整型数据成员quan、双精度型数据成员price。构造函数含3个参数:字符数组na[]及q、p。当定义Stock的类对象时,将对象的第1个字符串参数赋给数据成员stockcode,第2和第3个参数分别赋给quan、price。未设置第2和第3个参数时,quan的值为1000,price的值为8.98。成员函数 print()使用this指针,显示对象内容。

1.代码如下:

#include <iostream>
#include <cstring>
using namespace std;
const int N = 200;
class Stock
{
public:

	Stock(const char s[], int a = 1000, double b = 8.98) :quan(a), price(b)
	{
		strcpy(stockcode, s);
	}

	void print()
	{
		cout << "stockcode = " << this->stockcode << endl;
		cout << "quan = " << this->quan << endl;
		cout << "price = " << this->price << en

以上是关于Python编程训练题2的主要内容,如果未能解决你的问题,请参考以下文章

python面试题

2Python进阶强化训练之csv|json|xml|excel高

python matplotlib 绘制训练曲线 综合示例——平滑处理图题设置图例设置字体大小线条样式颜色设置

ARTS-2

ARTS-1

Python简介