栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言练习记录二

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言练习记录二

目录

点在矩形内

向量点积

约瑟夫环问题 

扫雷(计导作业)

Largest Block


点在矩形内

输入格式

​ 测评机会反复运行你的程序。每次程序运行时,你的程序会输入两行,第一行输入两个整数,由一个空格分隔,分别表示点的横坐标和纵坐标;第二行输入四个整数,任意两个整数之间用一个空格分隔,分别表示矩形某一条对角线上的两个顶点,前两个整数表示其中一个顶点的横坐标和纵坐标;后两个整数表示另一个顶点的横坐标和纵坐标。

​ 保证所有输入的整数都大于等于 -1000 并且小于等于1000。矩形的横向边平行于 x 轴,纵向边平行于 y 轴,且面积一定大于 。

输出格式

​ 输出为一行,如果给出的点在给出的矩形内或矩形边上,则输出YES,如果给出的点在给出的点在给出的矩形外,则输出NO。


样例输入

1 4
0 0 5 5

样例输出

YES

代码: 

#include 
#include 
int max(int a, int b){
    return a > b ? a : b;
}
int min(int a, int b){
    return a < b? a : b;
}
struct point{
    int x;
    int y;
}p;
struct rectangle{
    struct point p1;
    struct point p2;
}r;

int main() {
    scanf("%d %d", &p.x, &p.y);
    scanf("%d %d %d %d", &r.p1.x, &r.p1.y, &r.p2.x, &r.p2.y);
    if(p.x > max(r.p1.x, r.p2.x) || p.x < min(r.p1.x, r.p2.x) 
        || p.y > max(r.p1.y, r.p2.y) || p.y < min(r.p1.y, r.p2.y))
        printf("NO");
    else printf("YES");
    return 0;
}

向量点积

输入格式

​测评机会反复运行你的程序。每次程序运行时,你的程序需输入两行,第一行输入两个整数,由一个空格分隔,表示第一个向量的横坐标和纵坐标;第二行输入两个整数,由一个空格分隔,表示第二个向量的横坐标和纵坐标。

​保证所有输入的整数都大于等于 -1000 且小于等于 1000。

输出格式

​输出为一行,包含一个整数,为两个向量的点积。


样例输入

5 4
1 3

样例输出

17

代码: 

#include 
#include 

typedef struct point {
    int x;
    int y;
} Vector;

int vector_dotprod(Vector v1, Vector v2) {
    return v1.x*v2.x + v1.y*v2.y;
}

int main() {
    Vector v1;
    Vector v2;
    int dotprod_result;
    scanf("%d%d", &(v1.x), &(v1.y));
    scanf("%d%d", &(v2.x), &(v2.y));
    dotprod_result = vector_dotprod(v1, v2);
    printf("%d", dotprod_result);
    return 0;
}

约瑟夫环问题 

题目描述

有 N 个同学,围成了一个圆圈,每人被顺序地编了一个序号(1,2,3,...,N ),从编号为 K 的人开始报 1 ,他之后(顺初始数字增长方向计算序号)的人报 2,以此类推,数到某一个数字 M 的人出列。出列同学的下一个人又从 1 开始继续报数,数到某一个数字 M 的人出列。不断重复这一过程,直到所有人都出列为止。你需要根据同学人数 N 和给出的 K 和 M 计算出同学的正确出列顺序。

输入格式

测评机会反复运行你的程序。每次程序运行时,输入为一行,包括三个被空格分隔开的符合描述的正整数 N 、K 和 M。

输出格式

输出为一行,包含 N 个整数,为依次顺序出列的学生编号,由空格分隔开。

样例输入1

9 1 1

样例输出1

1 2 3 4 5 6 7 8 9

样例输入2

8 5 2

样例输出2

6 8 2 4 7 3 1 5

代码: 

因为做这题的目的是熟悉链表的用法,所以用了时间复杂度很高的解法。

#include 
#include 
typedef struct node {
    int data;
    struct node *next;
} Node;

Node *circle_create(int n);
void count_off(Node *head, int n, int k, int m);

int main() {
    int n, k, m;
    scanf("%d%d%d", &n, &k, &m);
    Node *head = circle_create(n);
    count_off(head, n, k, m);
    return 0;
}

Node *circle_create(int n) {
    Node *temp, *new_node, *head;
    int i;

    // 创建第一个链表节点并加数据
    temp = (Node *) malloc(sizeof(Node));
    head = temp;
    head->data = 1;

    // 创建第 2 到第 n 个链表节点并加数据
    for(i = 2; i <= n; i++) {
        new_node = (Node *) malloc(sizeof(Node));
        new_node->data = i;
        temp->next = new_node;
        temp = new_node;
    }

    // 最后一个节点指向头部构成循环链表
    temp->next = head;

    return head;
}

void count_off(Node *head, int n, int k, int m) {
    while(head->data != k){
        head = head->next;
    }
    int i, j;
    for(i = 0; i < n; i++){
        Node *pre = head;
        for(j = 1; j < m; j++){
            pre = head;
            head = head->next;
        }
        pre->next = head->next;
        printf("%d ",head->data);
        Node *temp = head;
        head = head->next;
        free(temp);
    }
}

扫雷(计导作业)

代码: 

我用的是暴力解法hhhhh

#include 
int main() {
	int m, n, i, j;
	char ch[1000][1000] = {};
	char output[1000][1000] = {};
	char flag = '0';
	scanf("%d %dn", &m, &n);
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			scanf("%c", &ch[i][j]);
		}
		scanf("n");
	}
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			if (ch[i][j] == '*') {
				output[i][j] = 'F';
				continue;
			}
			if (ch[i - 1][j - 1] == '*')
				flag++;
			if (ch[i - 1][j] == '*')
				flag++;
			if (ch[i - 1][j + 1] == '*')
				flag++;
			if (ch[i][j - 1] == '*')
				flag++;
			if (ch[i][j + 1] == '*')
				flag++;
			if (ch[i + 1][j - 1] == '*')
				flag++;
			if (ch[i + 1][j] == '*')
				flag++;
			if (ch[i + 1][j + 1] == '*')
				flag++;
			if (flag > '0') {
				output[i][j] = flag;
				flag = '0';
			}
			else { output[i][j] = '-'; }
		}
	}
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			printf("%c", output[i][j]);
		}
		printf("n");
	}
}

Largest Block

 代码: 

#include 
int i, j, n, x, y, size;
int mat[50][50];
int min(int a, int b){
	return a < b ? a : b;
}
int main() {
	printf("Enter the number of rows in the matrix:n");
	scanf("%d", &n);
	printf("Enter the matrix row by row:n");
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++)
			scanf("%d", &mat[i][j]);
	}
	for (i = n; i >= 1; i--) {
		for (j = n; j >= 1; j--) if (mat[i][j]) {
			if (mat[i][j + 1] == mat[i + 1][j])
				mat[i][j] = mat[i][j + 1] + 1;
			else mat[i][j] = min(mat[i][j + 1], mat[i + 1][j]) + 1;
			if (mat[i][j] >= size) {
				size = mat[i][j];
				x = i;
				y = j;
			}
		}
	}
	printf("The maxinum square submatrix is at (%d,%d) with size %d", x, y, size);
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号