#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[11];
int score;
} Student;
// 比较函数,用于决定排序规则
int compare(const void *a, const void *b, void *order) {
Student *student_a = (Student *)a;
Student *student_b = (Student *)b;
int sort_order = *(int *)order;
if (student_a->score == student_b->score) {
return 0; // 相同分数的学生保持原来的顺序
}
if (sort_order == 0) { // 从高到低排序
return student_b->score - student_a->score;
} else { // 从低到高排序
return student_a->score - student_b->score;
}
}
int main() {
int n, sort_order;
scanf("%d %d", &n, &sort_order);
Student *students = (Student *)malloc(n * sizeof(Student));
for (int i = 0; i < n; i++) {
scanf("%s %d", students[i].name, &students[i].score);
}
// 使用 qsort_r 进行排序,可以传递额外的参数给比较函数
qsort_r(students, n, sizeof(Student), compare, &sort_order);
for (int i = 0; i < n; i++) {
printf("%s %d\n", students[i].name, students[i].score);
}
free(students);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id; // 学生学号
int score; // 学生分数
} Student;
// 比较函数,用于排序
int compare(const void *a, const void *b) {
Student *student_a = (Student *)a;
Student *student_b = (Student *)b;
// 首先按分数排序
if (student_a->score != student_b->score) {
return student_a->score - student_b->score;
}
// 如果分数相同,则按学号排序
return student_a->id - student_b->id;
}
int main() {
int n;
scanf("%d", &n);
Student *students = (Student *)malloc(n * sizeof(Student));
for (int i = 0; i < n; i++) {
scanf("%d %d", &students[i].id, &students[i].score);
}
// 使用 qsort 进行排序
qsort(students, n, sizeof(Student), compare);
for (int i = 0; i < n; i++) {
printf("%d %d\n", students[i].id, students[i].score);
}
free(students);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000 // 假设最大长度为1000
// 用于模拟vector的功能
typedef struct {
int arr[MAX];
int size;
} Vector;
// 初始化Vector
void init_vector(Vector *v) {
v->size = 0;
}
// 向Vector中添加元素
void push_back(Vector *v, int val) {
if (v->size < MAX) {
v->arr[v->size++] = val;
}
}
// 反转Vector中的元素
void reverse(Vector *v) {
int temp;
for (int i = 0; i < v->size / 2; i++) {
temp = v->arr[i];
v->arr[i] = v->arr[v->size - 1 - i];
v->arr[v->size - 1 - i] = temp;
}
}
// 从高位开始除以b
Vector div_and_mod(Vector *A, int b, int *r) {
Vector C;
init_vector(&C);
*r = 0;
for (int i = A->size - 1; i >= 0; i--) {
*r = *r * 10 + A->arr[i];
push_back(&C, *r / b);
*r %= b;
}
reverse(&C);
// 删除前导零
while (C.size > 1 && C.arr[C.size - 1] == 0) {
C.size--;
}
return C;
}
int main() {
char s[MAX];
while (scanf("%s", s) != EOF) {
Vector A;
init_vector(&A);
int n = strlen(s);
for (int i = n - 1; i >= 0; i--) {
push_back(&A, s[i] - '0');
}
int r = 0;
Vector res, C;
init_vector(&res);
C = div_and_mod(&A, 2, &r);
do {
push_back(&res, r);
if (C.size == 1 && C.arr[0] == 0) break;
C = div_and_mod(&C, 2, &r);
} while (1);
for (int i = res.size - 1; i >= 0; i--) {
printf("%d", res.arr[i]);
}
printf("\n");
}
return 0;
}
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
int r=0;
//m进制的除法
vector<int> divide(vector<int> & in,int n,int m)
{
vector<int> res;
for(int i=in.size()-1;i>=0;i--)
{
//两位转换为10进制
in[i]=r*m+in[i];
res.push_back(in[i]/n);
r = in[i]%n;
}
reverse(res.begin(),res.end());
while(res.size() && res.back()==0) res.pop_back();
return res;
}
int main()
{
int m,n;
string x,res;
vector<int> save;
cin>>m>>n>>x;
//存储x到save中,从个位开始
for(int i=x.size()-1;i>=0;i--)
{
if(x[i]<='9') save.push_back(x[i]-'0');
else save.push_back(x[i]-'A'+10);
}
//开始处理x,将m进制的x转换为n进制的数
while(save.size())
{
save = divide(save,n,m);
if(r<=9) res+=r+'0';
else res+=r-10+'a';
//重新初始化余数为0
r=0;
}
//处理完成,输出结果
for(int i=res.size()-1;i>=0;i--)
cout<<res[i];
cout<<endl;
return 0;
}