题目名称:求最小元素
题目描述
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). Find the minimum element. You may assume no duplicate exists in the array. (注意:测试用例仅做参考,我们会根据代码质量进行评分)
输入描述:
第一行输入整数n。(1<=n<=10000)表示数组的大小 第二行给出n个整数a.(0<=a<=1e9)
输出描述:
输出答案
示例
输入
5
3 4 5 1 2
输出
1
就是找最小值,数组是乱序的,二分法也用不了,也没感觉有比for循环更快的了
#include <stdio.h>
#include <stdlib.h>
int cmp(const void*pa,const void*pb) {
int a=*(int*)pa;
int b=*(int*)pb;
if(a>b) {
return 1;
} else {
return 0;
}
}
void solution(int n, int arr []) {
qsort(arr,n,sizeof(n),cmp);
printf("%d",arr[0]);
}
int main() {
int n;
scanf("%d", &n);
int* arr;
arr = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
solution(n, arr);
return 0;
}
题目名称:韩信点兵
题目描述
韩信是中国古代伟大的军事家和统帅,他有一种独特的点兵方法:每个军队由若干个士兵组成,并且每个士兵有一个编号。 当韩信需要点兵时,他会给定一个正整数 K K K,表示点兵的人数。然后他会按照如下方式点兵: 1. 首先将所有士兵排成一列,编号依次为 1 , 2 , 3 , . . . , n 1,2,3,...,n 1,2,3,...,n。 2. 从第 1 1 1 个士兵开始,每隔 K K K 个士兵,就取出一个士兵。 例如,当 n = 10 n=10 n=10, k = 3 k=3 k=3 时,韩信会按照以下方式点兵: 1 4 7 10 你的任务是,给定 n n n 和 k k k,求出韩信点兵的顺序。
输入描述:
第一行包含两个整数 n n n 和 k k k,其中 n n n 表示士兵的数量, k k k 表示点兵的人数。
输出描述:
输出一行,包含 n n n 个整数,表示韩信点兵的顺序。
示例
输入 10 3
输出 1 4 7 10
完全不懂什么意思
搜到的都是余数问题,跟此题完全不搭边
题目名称:小艺改编字符串
题目描述
已知字符串str. 添加至少多少字符可以使得str变成回文串。
输入描述:
输入字符串s.(1<=len(str)<=100)
输出描述:
输出最小需要添加字符的数量。
示例
输入 abab
输出 1
比赛中出现的题目,基于回文判断的基础上,如果左右不一致,此时要往左边加字符或者右边加字符,要基于这2种情况递归。
使用数组缓存要追加字符的个数,否则会超时
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int tmpdata[1024][1024];
int min(int a,int b) {
if(a<b) {
return a;
} else {
return b;
}
}
int check(char*s,int len,int left,int right) {
if(tmpdata[left][right]>0) {
return tmpdata[left][right];
}
while(s[left]==s[right]&&left<right) {
left++;
right--;
}
int count=0;
if(left<right) {
//左边补位
int a=1+check(s,len,left,right-1);
int b=1+check(s,len,left+1,right);
count=min(a,b);
}
tmpdata[left][right]=count;
return count;
}
void solution(char *s) {
int len=strlen(s);
int ret=check(s,len,0,len-1);
printf("%d",ret);
}
int main() {
char s[1024]= {0};
scanf("%s", s);
memset(tmpdata,0,sizeof(int)*1024*1024);
solution(s);
return 0;
}