题目名称:城市交通规划(动态规划)
题目描述
有向图M中存在n个节点,编号为[1-n]. 两个节点的距离为abs(i-j)。 每个节点i存在一条特殊边到a[i]。 节点i通过特殊边到达a[i]距离为1. 列出节点1到其他节点的最短距离。 输入描述: 第一行输入整数n。(1<=n<=100000) 第二行输入整数a。(1<=a<=n)
输入描述:
第一行输入整数n。(1<=n<=100000) 第二行输入整数a。(1<=a<=n)
输出描述:
输出n个整数
示例
输入
3
2 2 3
输出
0 1 2
规则应该是
第i个节点应该是
1+第(i-1)个节点的值
1+第(i+1)个节点的值
1+第a[i]个节点的值
的最小值
可能要用n*n的表格吧
但是还是没搞定
题目名称:K皇把妹(数组遍历)
题目描述
存在n个节点,目标节点在m。 每个节点有自己的权值a。 在权值k内选择一个权值非0节点且与目标节点距离最近。 节点i与节点j的距离为abs(i-j)。
输入描述:
第一行输入整数n,m,k.(1<=n,m,k<=100) 第二行输入n个整数的权值。(1<=a<=1000)
输出描述:
输出最小距离
示例
输入
7 3 50
62 0 0 0 99 33 22
输出
3
一道很简单的遍历题,为什么会定为困难基本???
#include <stdio.h>
#include <stdlib.h>
int min(int a,int b) {
return a<b?a:b;
}
void solution(int n, int m, int k, int arr []) {
int s=101;
for (int i=0;i<n;i++) {
if(arr[i]==0||arr[i]>k) {
continue;
}
s=min(s,abs(i+1-m));
}
printf("%d",s);
}
int main() {
int tem_arr[3];
for (int i = 0; i < 3; i++) {
scanf("%d", &tem_arr[i]);
}
int n = tem_arr[0];
int m = tem_arr[1];
int k = tem_arr[2];
int* arr;
arr = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
solution(n, m, k, arr);
return 0;
}
题目名称:字符串全排列(排列组合)
题目描述
对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串? 比如[“ABC”, “ACB”, “BAC”, “CAB”, “CBA”] 返回 “BCA”
输入描述:
第一行输入整数n,表示给定n个字符串。(n == x!-1,2<=x<=10) 以下n行每行输入一个字符串。
输出描述:
输出全排列缺少的字符串。
示例
输入
5
ABC
ACB
BAC
CAB
CBA
输出
BCA
写过多次了,以第一组为输入,进行全排序比较即可
不存在则输出
要考虑n=0的情况
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char*str,int a,int b) {
char c=str[a];
str[a]=str[b];
str[b]=c;
}
void checkstr(char*str,int n,char*arr[]) {
int bFind=0;
for (int i=0;i<n;i++) {
if(strcmp(str,arr[i])==0) {
bFind=1;
break;
}
}
if(bFind==0) {
printf("%s",str);
}
}
void sortstr(char*str,int len,int pos,int n,char*arr[]) {
if(len==pos) {
checkstr(str,n,arr);
return;
}
for (int i=pos;i<len;i++) {
swap(str,i,pos);
sortstr(str,len,pos+1,n,arr);
swap(str,i,pos);
}
}
void solution(int n, char*arr[]) {
int len=strlen(arr[0]);
char*str=(char*)malloc(sizeof(char)*(n+1));
strcpy(str,arr[0]);
sortstr(str,len,0,n,arr);
}
int main() {
int n;
scanf("%d", &n);
if(n==0) {
return 0;
}
char** arr;
arr = (char**)malloc(n * sizeof(char*));
for (int i = 0; i < n; i++) {
arr[i] = (char*)malloc(sizeof(char));
}
for (int i = 0; i < n; i++) {
scanf("%s", arr[i]);
}
solution(n, arr);
return 0;
}