《算法笔记》01

2023-11-08

1. 比较交换3个实数值,并按序输出

从键盘输入3个实数a, b, c,通过比较交换,将最小值存储在变量a中,最大值存储在变量c中,中间值存储在变量b中,并按照从小到大的顺序输出这三个数a, b, c。末尾输出换行。

#include<stdio.h>
int main(){
    double a,b,c,t;
    scanf("%lf %lf %lf",&a,&b,&c);
    if(a>b){
        t=a;
        a=b;
        b=t;
        }
    if(a>c){
        t=a;
        a=c;
        c=t;
        }
    if(b>c){
        t=b;
        b=c;
        c=t;
        }
    printf("%.2f %.2f %.2f\n",a,b,c);
    return 0;
}
2. 三个整数求最大值

有3个整数a, b, c,由键盘输入,输出其中最大的数。

#include<stdio.h>
#define DA(a,b) ((a)>(b)?(a):(b))
int main(){
	int a,b,c,t,m;
	scanf("%d %d %d",&a,&b,&c);
	t=DA(a,b);
	m=DA(t,c);
	printf("%d\n",m);
	return 0;
}
3. 求圆周率pi的近似值

在这里插入图片描述
求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。

要求输出的结果总宽度占10位,其中小数部分为8位。

程序中使用浮点型数据时,请定义为双精度double类型。

#include <stdio.h>
#include <math.h>
int main() {
	double PI, i, n=0, sum=0;
	for(i=1; ; i++) {
		n = 1/(2*i-1); //第 i 项的值
		if(n <= pow(10,-6)) {
			printf("PI=%10.8f", PI);
			return 0;
		}
		sum = sum-pow(-1,i)*n; // i项累加的结果
		PI = sum * 4.0; // PI的值
	}
	return 0;
}

4. Fibonacci数列

输入一个正整数n,求Fibonacci数列的第n个数。Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。要求输入的正整数n不超过50.

#include <stdio.h>
#include <math.h>

int fib(int n){
	if(n<0||n>50) return 0;
	if(n==1||n==2){
		return 1;
	}
	int a=1,b=1;
	int sum=2;
	for(int i=3;i<=n;i++){
		sum=a+b;
		a=b;
		b=sum;	
	}
	return sum;
}
	
int main() {
	int n;
	scanf("%d",&n);
	int f=fib(n);
	printf("%d\n",f);
	return 0;
}

5. 分数序列求和

在这里插入图片描述
求出次数列的前20项之和。
请将结果的数据类型定义为double类型。

#include <stdio.h>
#include <math.h>
	
int main() {
	double a[21]={1,2};
	double sum=0.0;
	for(int i=2;i<21;i++){
		a[i]=a[i-1]+a[i-2];
	}
	for(int j=0;j<20;j++){
		sum+=(a[j+1]/a[j]);
	}
	printf("%.6f\n",sum);
	return 0;
}

6. 有序插入

有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中。
假设数组长度为10,数组中前9个数(这9个数要求从键盘上输入,输入时要满足自小到大的输入顺序)已经按从小到大进行排序。
然后再从键盘上输入一个整数,将此整数插入到前有序的9个数中,使得最终的10个数依然是从小到大有序的。

#include <stdio.h>
	
int main() {
	int a[10];
	int n;
	for(int w=0;w<9;w++){
		scanf("%d ",&a[w]);
	}
	scanf("%d",&n);
	int i=0,j;
	for(;i<10;i++){  //位于a[j]
		if(n>a[i]) continue;
		j=i;
		break;
	}
	for(int t=8;t>=j;t--){
		a[t+1]=a[t];
	}
	a[j]=n;
	for(int q=0;q<10;q++){
		printf("%d\n",a[q]);
	}
	return 0;
}

7. 数组元素逆置

将一个长度为10的整型数组中的值按逆序重新存放。
如:原来的顺序为1,2,3,4,5,6,7,8,9,0,要求改为0,9,8,7,6,5,4,3,2,1

#include <stdio.h>

int main() {
	int a[10]={0};
	for(int w=0;w<10;w++){
		scanf("%d",&a[w]);  //%d后不能有空格!
	}
	for(int j=0;j<5;j++){
		int temp=a[j];
		a[j]=a[9-j];
		a[9-j]=temp;
	}
	for(int i=0;i<10;i++){  //位于a[j]
		printf("%d\n",a[i]);
	}
	
	return 0;
}

#include <cstdio>
#include <cstring>
int main()
{
	int a[10];
	for(int i=0;i<=9;i++){
		scanf("%d",&a[i]);
	}
	for(int b=9;b>=0;b--){   //直接倒着输出
		printf("%d\n",a[b]);
	}
	return 0;
}
8. 杨辉三角
#include <cstdio>

int main(){
  int n;
  scanf("%d",&n);
  int i,j,a[n][n];

  for (i=0;i<n;i++){			
	 a[i][i]=1;
     a[i][0]=1;
  }

  for (i=2;i<n;i++){				
    for (j=1;j<=i-1;j++) 
       a[i][j]=a[i-1][j-1]+a[i-1][j];
  }
  
  for (i=0;i<n;i++){			
	 for (j=0;j<=i;j++){
	 	printf("%d ",a[i][j]);
	 }		
     printf("\n");  
  }
  return 0;
}

9. 解密

65–90:A–Z
97–122:a–z
相差32

#include <cstdio>
#include <cstring>
int main()
{
	char a[20];
	scanf("%s",a);
	for(int i=0;i<strlen(a);i++) 
	{
		if(a[i]>=65&&a[i]<=90)  //A--Z
			a[i]=26-(a[i]-65)+64;
		else if(a[i]>=97&&a[i]<=122)  //a--z
			a[i]=26-(a[i]-97)+96;
	}
	printf("%s",a);
	return 0;
}
10. 字符串比较
#include <cstdio>
#include <cstring>
int main()
{
	char a[20],b[20];
	gets(a); //输入字符串,会换行
	gets(b);
	int sum=0;
	int min=strlen(a)>strlen(b)?strlen(b):strlen(a);  //strlen
	for(int i=0;i<=min;i++)
		sum+=a[i]-b[i];
	printf("%d",sum);
	return 0;
}
11. 冒泡排序
#include <cstdio>
#include <cstring>
#include <cmath>
int main()
{
	int str[10]={};
	for(int i=0;i<10;i++){
		scanf("%d",&str[i]);
	}
	for(int a=1;a<=9;a++){   //9趟排序 
		for(int b=0;b<=9-a;b++){
			if(str[b]>=str[b+1]){
				int temp=str[b];
				str[b]=str[b+1];
				str[b+1]=temp;
			}
		}
	}
	for(int j=0;j<10;j++){
		printf("%d\n",str[j]);
	}
	return 0;
}
12. 字符串求最大值

当s1<s2时,返回为负数;
当s1=s2时,返回值= 0;
当s1>s2时,返回正数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。

#include <cstdio>
#include <cstring>
#include <cmath>
int main()
{
	char a[3][10];
	for(int i=0;i<3;i++)
		gets(a[i]);
	int max=0;
	for(int i=1;i<3;i++)
		if(strcmp(a[max],a[i])<=0)
			max=i;
	printf("%s",a[max]);

	return 0;
}
13. 输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理
#include <cstdio>
#include <cstring>
#include <cmath>

int main()
{
	char a[20],b[20],c[20];
	char *p=a,*q=b,*r=c;
	scanf("%s%s%s",a,b,c);
	printf("%s\n%s\n%s\n",strcmp((strcmp(p,q)>0?q:p),r)<0?(strcmp(p,q)>0?q:p):r,
		strcmp((strcmp(p,q)>0?p:q),r)>0?(strcmp((strcmp(p,q)>0?q:p),r)>0?(strcmp(p,q)>0?q:p):r):(strcmp(p,q)>0?p:q),
		strcmp((strcmp(p,q)>0?p:q),r)>0?(strcmp(p,q)>0?p:q):r);
	return 0;
}

14. 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。
#include <iostream>
using namespace std;
int a[10]={0};int i;
void get(int a[10])
{
	for(i=0;i<10;i++)
		cin>>a[i];
}
void change(int a[10])  //设置min max变量,与10个数依次比较大小
{
	int max,min,temp;min=a[0];max=a[0];int t=0;
	for(i=0;i<10;i++)
	{
		if(min>=a[i])
		{
			min=a[i];
			t=i;
		}
	}
	temp=a[t];
	a[t]=a[0];
	a[0]=temp;            //a[0]已是最小值 
	for(i=0;i<10;i++)
	{
		if(max<=a[i])
		{
			max=a[i];
			t=i;
		}
	}
	temp=a[t];
	a[t]=a[9];
	a[9]=temp;       //a[9]已是最大值 
}
void out(int a[10])
{
	for(i=0;i<10;i++)
		cout<<a[i]<<" ";

}
int main()
{
	get(a);
	change(a);
	out(a);

}

15. 完成一个对候选人得票的统计程序。假设有3个候选人,名字分别为Li,Zhang和Fun。使用结构体存储每一个候选人的名字和得票数。记录每一张选票的得票人名,输出每个候选人最终的得票数。

类型为 double 的包含 10 个元素的数组 balance double balance[10];
现在 balance 是一个可用的数组,可以容纳 10 个类型为 double 的数字。

#include <cstdio>
#include <cstring>
struct person 
{
	char name[20];
	int count;
}leader[3] = {"Li", 0, "Zhang", 0, "Fun", 0};
int main()
{			
	int n;
	scanf("%d",&n);
	char name[100][10];     //明白要用二维数组,但不知道为什么name[100][1]也正确?
	for(int i=0;i<n;i++)
		scanf("%s",name[i]);
	for(int i=0;i<n;i++)
		if(strcmp(name[i],leader[0].name)==0)
			leader[0].count++;
		else if(strcmp(name[i],leader[1].name)==0)
			leader[1].count++;
		else if(strcmp(name[i],leader[2].name)==0)
			leader[2].count++;
	for(int i=0;i<3;i++)
		printf("%s:%d\n",leader[i].name,leader[i].count);
	return 0;
}
16. 定义一个结构体student,存储学生的学号、名字、性别和年龄,读入每个学生的所有信息,保存在结构体中,并输出。本题要求使用指向结构体数组的指针进行输入和输出。
#include<stdio.h>
#include<string.h>
struct student {
    int num;
    char name[20];
    char sex;
    int age;
};

int main()
{
	int n;
	scanf("%d",&n);
	student stu[20];
	for(int i=0;i<n;i++)
		scanf("%d %s %c %d",&stu[i].num,stu[i].name,&stu[i].sex,&stu[i].age);
	struct student *p=&stu[0];
	for(int i=0;i<n;i++)
		printf("%d %s %c %d\n",(p+i)->num,(p+i)->name,(p+i)->sex,(p+i)->age);
		
	return 0;
} 


17. 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。
#include<stdio.h>
#include<string.h>

struct student{
    int num;
    char name[10];
    int grade[3];
    double average;
}stu[10];

void input(){
	for(int i=0;i<10;i++){
		scanf("%d %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].grade[0],&stu[i].grade[1],&stu[i].grade[2]);
		stu[i].average=(stu[i].grade[0],stu[i].grade[1],stu[i].grade[2])/3;
	}

}
void output(){
	double a=0,b=0,c=0;
	int max=0;
	for(int i=0;i<10;i++){
		a+=double(stu[i].grade[0]);
		b+=double(stu[i].grade[1]);
		c+=double(stu[i].grade[2]);
		if(i!=0)
			{if(stu[i].average>stu[max].average)
				max=i-1;  //并不知道为什么要-1,猜测是因为数组,目前还没搞懂
			}
	}
	printf("%.2f %.2f %.2f\n",a/10,b/10,c/10);
	printf("%d %s %d %d %d\n",stu[max].num,stu[max].name,stu[max].grade[0],stu[max].grade[1],stu[max].grade[2]);
	
}
int main()
{
	input();
	output();
	return 0;
} 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《算法笔记》01 的相关文章

  • resa复现

    源代码 https github com ZJULearning resa 1 数据集准备 参考Ultra Fast Lane Detection 复现 2 环境搭建 conda create n resa python 3 8 y con

随机推荐

  • Appium环境搭建之Android SDK及模拟器的下载配置

    一 Android SDK下载及配置 1 访问https www androiddevtools cn 下载Android SDK 提供有exe和zip两种格式下载 2 下载zip压缩包 直接解压至想要安装的路径 3 然后就双击 SDK M
  • UE-c++ TSubclassOf

    TSubclassOf 是提供UClass类型安全性的模板类 例如您在创建一个投射物类 允许设计者指定伤害类型 您可只创建一个UClass类型的UPROPERTY 让设计者指定派生自UDamageType的类 或者您可使用TSubclass
  • 1.1.4 Qt信号槽之再谈Qt4与Qt5中信号槽使用的差异

    Qt信号槽之再谈Qt4与Qt5中信号槽使用的差异 Differences between String Based and Functor Based Connections 通过上面的示例和分析 我们已经明显感受到Qt4和Qt5中conn
  • GSEA

    软件下载网址 GSEA gsea msigdb org GSEA不需要设置阈值过滤基因 有助于我们从整体通路分析差异 一 数据准备 1 数据集 tpm bulk gct 你需要分析的表达矩阵 建议bulk数据用tpm标准化后的 第一行 1
  • Flutter常用插件和对.yaml讲解

    目录 一 对Flutter项目中的pubspec yaml 进行讲解 二 Flutter 常用插件 1 时间选择器 2 toast 3 RxDart 类似RxJava 和RxSwift 4 本地存储 保存 和Android sp 一样 5
  • leetcode 63 不同路径II

    题目 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 现在考虑网格中有障碍物 那么从左上角到右下角将会有多少条不同
  • wedo2.0编程模块介绍_福特福克斯TCM重新编程操作

    适用范围 支持车型 年款 新福克斯 2011 2018 1 6L 2 0L DPS6变速箱 车型 嘉年华 2013 1 5L DPS6变速箱 车型 翼博 2013 2016 1 5L DPS6变速箱 车型 功能介绍 升级ECU版本或者对空白
  • DGA域名检测的数据分析与深度学习分类

    一 引言 在恶意软件发展的初期 恶意软件编写者会直接将控制服务器的域名或IP直接写在恶意软件中 即使是现在也会有恶意软件遵从这种方式 笔者部署的蜜罐捕获的僵尸网络样本中 很多经过逆向之后发现也是直接将IP写在软件中 对于这种通信的方式 安全
  • PCL 点云边界提取

    边界提取 一 算法原理 1 算法概述 2 详细流程 3 参考文献 二 代码实现 三 结果展示 一 算法原理 1 算法概述 基于法线实现点云边界提取 pcl BoundaryEstimation 2 详细流程 3D点云的边缘点往往位于最外围
  • 指定版本安装selenium(python)

    怎样指定selenium 卸载selenium pip uninstall selenium 指定版本安装selenium pip install selenium 3 3 1
  • PyQt(Python+Qt)学习随笔:windows下使用pyinstaller将PyQt文件打包成exe可执行文件

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 在 windows下使用pyinstaller将多个目录的Python文件打包成exe可执行文件 介绍了可以使
  • chatgpt赋能python:看Python代码的App:提高你的编程技能

    看Python代码的App 提高你的编程技能 Python作为一门流行的编程语言 使用者越来越多 如果你是一名初学者或是有多年的编程经验的工程师 你可能会遇到需要查看Python代码的情况 为了满足这一需求 近年来出现了一些看Python代
  • 如何用cmd查看文件内容的MD5值

    certutil hashfile 文件名称 文件类型 MD5 如 certutil hashfile 123 MP3 MD5
  • 常用函数整理(基础篇)

    目录 strcpy 返回值 strcat Parameters 返回值 例 strncpy Parameters 返回值 例 strncat Parameters 返回值 例 strncmp Parameters 返回值 例 strstr
  • 精灵图与遮罩层的使用方法

    一 精灵图 精灵图的使用步骤 第一步 先测量精灵图局部的大小 设置为盒子的宽度和高度 第二部 测量精灵图局部的坐标值 设置为背景定位的负值 宽 width 20px 高 height 20px 精灵图局部定位值 84px 366px 二 遮
  • monkey命令

    monkey是adb调试工具中的一个命令 用于android设备的稳定性测试 主要是为了测试app会不会出现crash和anr 以及出现的时间和次数 adb shell monkey命令 可以查看命令所能携带的参数 crash 程序崩溃或闪
  • background-position: -192px -48px;//图片定位详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt
  • SAP S/4实操LTMC 数据迁移驾驶舱

    SAP S 4实操LTMC 数据迁移驾驶舱 文章目录 SAP S 4实操LTMC 数据迁移驾驶舱 前言 一 LTMC是什么 二 使用步骤 1 配置好SICF并正常启用LTMC服务 2 数据迁移 2 1 创建迁移项目 2 2 数据整理 总结
  • 蓝牙简单配对(Simple Pairing)协议及代码流程简述

    DESCRIPTION 在BT2 1及之后版本 蓝牙协议有在传统的密码配对 PIN Code Pairing 之外 新增一种简单配对 Simple Pairing 的方式 这种新的配对方式操作更为简单 安全性也更强 目前市面上大部分蓝牙设备
  • 《算法笔记》01

    1 比较交换3个实数值 并按序输出 从键盘输入3个实数a b c 通过比较交换 将最小值存储在变量a中 最大值存储在变量c中 中间值存储在变量b中 并按照从小到大的顺序输出这三个数a b c 末尾输出换行 include