【<图论>作业】

作业

day 1 : // p17

1.输入两个整型数,输出最大值。

int max(int x,int y){
	return x >= y ? x : y;
}

2.输入三个整型数,输出最大值。

int max(int x, int y, int z) {
	return max(x, y) > max(y, z) ? max(x, y) : max(y, z);

}

3.输入三个整型数,输出中间大的数值。

int mid_number(int x, int y, int z) {
	if (min(x, y, z) < x && x < max(x, y, z)) return x;
	else if (min(x, y, z) < y && y < max(x, y, z))  return y;
	else return z;
}

day 2: // p18

1.输出所有的"水仙花数",所谓"水仙花数"是指一个3 位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为
153 = 1 3 + 5 3 + 3 3 。 153=1^3 + 5^3+3^3。 153=13+53+33。

#include<stdio.h>
#include<math.h>
int isWaterNum(int x){
	if(x == pow(x/100,3)+pow(x%100/10,3)+pow(x%100%10,3))
		return 1;
	return 0;
}
int main(){
	int i;
	for ( i = 100 ; i < 1000; ++i )
	{
		if(isWaterNum(i))
			printf("%d\n", i );
	}
	return 0;

2.一个球从100m 高度*落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第 10次落地时,共经过多少米,第 10次反弹多高。

double floowHightSum(double h,int n){ //》》》假设无能量上损失,所有碰撞皆为弹性碰撞
	int i;
	double sum = h;        //从第一次落地开始累加
	for(i=1;i<n;i++){
		sum += 2*(1/2.0)*h;//下落高度为h时弹起(1/2)*h,往返2*(1/2)*h
		h = h/2;		  //每次循环h减半
	}	
	return sum;						
}

3.输出9*9乘法表

void print(){
	int i,j;
	for ( i = 1; i < 10; ++i)
	{
		for ( j= 1; j < i; ++j)
		{
			int sum = i*j;
			printf("%d*%d=%d\t",j,i,sum);
		}
	    printf("\n");
		
	}
}

day 3: //p19

1.定义大小为 n = 10 的整型数组,使用随机函数初始化数组元素,输出数组中的元素值。

#include<stdlib.h>
#include<stdio.h>
int main(){
	int a[10],i;
	for(i=0;i<10;i++){
		a[i] = rand();
	}
	for(i=0;i<10;i++){
		printf("%d\n",a[i]);
	}
	int b[10];
	while(*b++ = *(a+9)--);
	for(i=0;i<10;i++){
		printf("%d\n",b[i]);
	}
}

2.编程实现数组元素的逆转。(数组大小为10,可以是整型数组,也可以是字符串)

void reverse(int* &a,int length) {
	int lift = 0;
	int right = length - 1;
	while (lift < right) {
		int temp = a[lift];
		a[lift] = a[right];
		a[right] = temp;
		lift++;
		right--;
	}
}

3.将数组ar的元素赋值到数组br中(n = 10)。

void copy(int* &oldArray, int* &newArray) {
	*(newArray++) = *(oldArray++);
}

4.冒泡排序数组,并输出数组。

void sort(int*& a,int length) {
	int indexMax = length - 1;
	for (int i = 0; i < indexMax; i++) {
		for (int j = i; j < indexMax; j++) {
			if (a[i] > a[j]) {
				int temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
}

day 4 : // p20

1、使用函数实现,比较三个数的大小返回值:

int min(int x, int y) {

	return x > y ? y : x;
}
int max(int x, int y) {
	return x > y ? x : y;
}
int max(int x, int y, int z) {
	return max(x, y) > max(y, z) ? max(x, y) : max(y, z);

}
int min(int x, int y, int z) {
	return min(x, y) > min(y, z) ? min(y, z) : min(x, y);

}

2、使用函数实现,比较三个数的大小返回中间值;

int mid_number(int x, int y, int z) {
	if (min(x, y, z) < x && x < max(x, y, z)) return x;
	else if (min(x, y, z) < y && y < max(x, y, z))  return y;
	else return z;
}

3、编写一个判断闰年的函数。

int is_year(int year) {
	//判断year是否是闰年
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
		return 1;
	}
	return 0;
}

day 5 : // p26

1、使用辗转相除法计算最大公约数

int gcd(int a, int b) {
	//返回a,b的最大公约数
	int temp;
	while (b!=0)
	{
		int temp = a % b;
		a = b;
		b = temp;
	}
	return a;

}

2、根据上题计算最小公倍数

int minCommonMultiple(int x, int y) {
	return (x * y) / gcd(x, y);
}

3、编写一个判断素数的函数

int isPrimeNumber(int number) {
	int temp = sqrt(number);
	for (int i = 2; i < temp; i++) {
		if (number % i == 0) return 0;
	}
	return 1;
}

4、用牛顿迭代法求开方;

double Newtons_method(int a) {
	//用牛顿迭代法求X的开方
	//谭浩强-C程序设计-第五章课后习题-第13题(p138) 
	// 习题解答---谭浩强-C程序设计--学习辅导(P47)
	//x[n+1] = 1/2(x[n]+a/x[n])【 x = sqrt(a)】
	double x0 = a / 2;
	double x1 =(x0 + a / x0)/2;
	do {
		x0 = x1;
		x1 = (x0 + a / x0)/2;
	} while (fabs(x1 - x0) > (1e-5));
	return x1;
}

5、随机生成1-100之间的数请人猜,猜对了结束游戏,猜错了,提醒是猜大了还是猜小了;

void game() {
	int answer;
	int count = 0;
	srand((int)time(0));
	/*void srand( unsigned seed ); 
	功能: 设置rand()随机序列种子。对于给定的种子seed, 
			rand()会反复产生特定的随机序列.*/
	int number = rand() % 100 + 1;
	cout << "\t\t------游戏开始-------\n" << "请输入你猜的数(tip:你的输入在1—100之间)"<<endl;
	while (1) {
		cin >> answer;
		count++;
	
		if (answer >number ) {
			cout << "你猜大了"<<"请重新输入:"<<endl;
		}
		else if (answer < number) {
			cout << "你猜小了" << "请重新输入:"<<endl;
		}
		else {
			cout << "恭喜你,回答正确!!!\n一共猜了"<<count<<"次" << endl;
			break;

		}
	}
	return;

}

主函数

#include<iostream>
#include<math.h>
using namespace std;
int min(int x, int y) {

	return x > y ? y : x;
}
int max(int x, int y) {
	return x > y ? x : y;
}
int max(int x, int y, int z) {
	return max(x, y) > max(y, z) ? max(x, y) : max(y, z);

}
int min(int x, int y, int z) {
	return min(x, y) > min(y, z) ? min(y, z) : min(x, y);

}
int mid_number(int x, int y, int z) {
	if (min(x, y, z) < x && x < max(x, y, z)) return x;
	else if (min(x, y, z) < y && y < max(x, y, z))  return y;
	else return z;
}
int is_year(int year) {
	//判断year是否是闰年
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
		return 1;
	}
	return 0;
}
int gcd(int a, int b) {
	//返回a,b的最大公约数
	int temp;
	while (b!=0)
	{
		int temp = a % b;
		a = b;
		b = temp;
	}
	return a;

}
int minCommonMultiple(int x, int y) {
	return (x * y) / gcd(x, y);
}
int isPrimeNumber(int number) {
	int temp = sqrt(number);
	for (int i = 2; i < temp; i++) {
		if (number % i == 0) return 0;
	}
	return 1;
}
double Newtons_method(int a) {
	//用牛顿迭代法求X的开方
	//谭浩强-C程序设计-第五章课后习题-第13题(p138) 
	// 习题解答---谭浩强-C程序设计--学习辅导(P47)
	//x[n+1] = 1/2(x[n]+a/x[n])【 x = sqrt(a)】
	double x0 = a / 2;
	double x1 =(x0 + a / x0)/2;
	do {
		x0 = x1;
		x1 = (x0 + a / x0)/2;
	} while (fabs(x1 - x0) > (1e-5));
	return x1;
}
void game() {
	int answer;
	int count = 0;
	srand((int)time(0));
	/*void srand( unsigned seed ); 
	功能: 设置rand()随机序列种子。对于给定的种子seed, 
			rand()会反复产生特定的随机序列.*/
	int number = rand() % 100 + 1;
	cout << "\t\t------游戏开始-------\n" << "请输入你猜的数(tip:你的输入在1—100之间)"<<endl;
	while (1) {
		cin >> answer;
		count++;
	
		if (answer >number ) {
			cout << "你猜大了"<<"请重新输入:"<<endl;
		}
		else if (answer < number) {
			cout << "你猜小了" << "请重新输入:"<<endl;
		}
		else {
			cout << "恭喜你,回答正确!!!\n一共猜了"<<count<<"次" << endl;
			break;

		}
	}
	return;

}
void reverse(int* &a,int length) {
	int lift = 0;
	int right = length - 1;
	while (lift < right) {
		int temp = a[lift];
		a[lift] = a[right];
		a[right] = temp;
		lift++;
		right--;
	}
}
void copy(int* &oldArray, int* &newArray) {
	*(newArray++) = *(oldArray++);
}
void sort(int*& a,int length) {
	int indexMax = length - 1;
	for (int i = 0; i < indexMax; i++) {
		for (int j = i; j < indexMax; j++) {
			if (a[i] > a[j]) {
				int temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
}
int main() {
	//------------------------------------
	int year;
	cout << "输入年份:"<<endl;
	cin >> year;
	if (is_year(year)) {
		cout << year<<"是闰年"<<endl;
	}
	else cout << year<<"不是闰年"<<endl;
	//------------------------------------
	//game();
	//-----------------------------------
	int a;
	cin >> a;
	cout<<a<<"的平方根为"<<Newtons_method(a)<<endl;
	//------------------------------------
	cout << gcd(12, 40)<<endl;
	cout << isPrimeNumber(11)<<endl;
	cout << minCommonMultiple(12, 40)<<endl;

	return 0;
}



上一篇:容器技术基础(三)——Docker实践|学习笔记


下一篇:MySQL分组函数