5月6号考核
·

#include<stdio.h>
#include<stdlib.h>
int main(void) {
int len;
scanf("%d", &len);
int* nums = (int*)malloc(sizeof(int) * len);
for (int i = 0; i < len; ++i) {
scanf("%d", nums + i);
}
int target, i, j;//i为左下标,j为右下标
scanf("%d", &target);
for (i = 0, j = len - 1; i < j;) {
if ((nums[i] + nums[j]) > target) {
j--;//和大,j左移
} else if ((nums[i] + nums[j]) < target) {
i++;//和小,i右移
} else {
printf("[%d,%d]", nums[i], nums[j]);
break;
}
}
return 0;
}

#include<stdio.h>
#include<stdlib.h>
typedef struct LinkList {
int val;
struct LinkList* next;
}Node;
Node* creat() {
int n;
puts("输入长度");
scanf("%d", &n);
Node* head = (Node*)malloc(sizeof(Node));
Node* end = head;
for (int i = 0; i < n; ++i) {
Node* node= (Node*)malloc(sizeof(Node));
scanf("%d", &node->val);
end->next = node;
end = node;
}
end->next = NULL;
return head;
}
void print(Node* head) {
while (head->next) {
printf("%d ",head->next->val);
head = head->next;
}
}
int main(void) {
Node* head1 = creat();
Node* head2 = creat();
Node* newhead = (Node*)malloc(sizeof(Node));
Node* t1 = head1->next, * t2 = head2->next, * p = newhead;
while (t1 && t2) {
if (t1->val <= t2->val) {
p->next = t1;
p = t1;
t1 = t1->next;
} else if (t1->val > t2->val) {
p->next = t2;
p = t2;
t2 = t2->next;
}
}
if (t1 == NULL) {
p->next = t2;
}
if (t2 == NULL) {
p->next = t1;
}
print(newhead);
return 0;
}


#include<stdio.h>
#include<string.h>
int main(void) {
char word1[101];
char word2[101];
char word3[101];
gets(word1);
gets(word2);
int len1 = strlen(word1);
int len2 = strlen(word2);
int i = 0, j = 0, len = 0;
for (; i < len1 && j < len2;) {
if (len % 2 == 0) {
word3[len++] = word1[i++];
} else {
word3[len++] = word2[j++];
}
}
if (i == len1) {//第一个短
while (word2[j]) {
word3[len++] = word2[j++];
}
}
if (j == len2) {//第二个短
while (word1[i]) {
word3[len++] = word1[i++];
}
}
word3[len] = 0;
puts(word3);
return 0;
}

#include<stdio.h>
#include<math.h>
#include<string.h>
#define M 10005
char s1[M], s2[M], s[M];
int a[M], b[M], c[M];
int main(void) {
int i, j, m, n, k;
int flag1 = 1;
int flag2 = 1;
gets(s1);
gets(s2);
memset(c, 0, sizeof(c));
n = strlen(s1);
m = strlen(s2);
if (s1[0] == '-') {
flag1 = -1;
}//标记正负
if (s2[0] == '-') {
flag2 = -1;
}//标记正负
k = n + m;//保证相乘后的位数不会大于k
/*把字符串s1和s2逆序用数字排列*/
for (i = 0; i < n; i++) {
if (flag1 == -1) {
if (i == n - 1) {
break;
}
}
a[i] = s1[n - i - 1] - '0';
}
for (i = 0; i < m; i++) {
if (flag1 == -1) {
if (i == n - 1) {
break;
}
}
b[i] = s2[m - 1 - i] - '0';
}
/* 乘运算*/
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
c[i + j] += a[i] * b[j];
//乘法法则运算
}
}
for (i = 0; i <= k; i++) {
if (c[i] >= 10) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
/*去除前导0*/
i = k;
while (c[i] == 0) {
i--;
}
/*判断两个非负数之积是否为0,以及逆序打印c[]*/
if (i < 0) {
printf("0");
} else {
if (flag1 * flag2 == -1) {
printf("-");
}
for (; i >= 0; i--) {
printf("%d", c[i]);
}
}
printf("\n");
return 0;
}

#include<stdio.h>
int book[10];//标记数组
int find[10];//答案数组
int len;
void print(int n) {
for (int i = 1; i <= n; ++i) {
printf("%5d", find[i]);
}
printf("\n");
}
void dfs(int step,int n) {
if (step == n + 1) {
//所有数字已经都用过了,即找到一种排列
print(n);//输出这种排列
return;//注意,输出后一定要返回
}
for (int i = 1; i <= n; ++i) {
if (book[i]) {
//如果i被使用过,继续找没使用过的i
continue;
}
//找到未被使用的i
book[i] = 1;//标记它
find[step] = i;//把它放到答案里
dfs(step + 1, n);//继续找下一个位置
//注意,是一步步返回的,一定要在每步结束后把标记归0
book[i] = 0;
}
return;
}
int main(void) {
int n;
scanf("%d", &n);
book[10] = { 0 };
len = 0;
dfs(1, n);
return 0;
}
更多推荐



所有评论(0)