目录
点在矩形内
向量点积
约瑟夫环问题
扫雷(计导作业)
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
#includeint 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
代码:
#includeint 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); }



