0%

算法笔记

算法笔记
PAT链接

分类

排序
查找
入门模拟
算法初步
数学问题


动态规划

1001 害死人不偿命的(3n+1)猜想

#include<stdio.h>

int main(){
int n, count = 0;
scanf("%d", &n);
while(n != 1){
if(n % 2 == 0) n = n / 2;
else n = (3 * n + 1) / 2;
count++;
}
printf("%d", count);
return 0;
}

1032 挖掘机技术哪家强

#include<stdio.h>
const int maxn = 1e5;
int school[maxn] = {0};

int main(){
int n, schoolid, score;
int k = 1, max = -1;
scanf("%d", &n);
if(n > maxn) return 0;
for(int i = 0; i < n; i++){
scanf("%d %d", &schoolid, &score);
school[schoolid] += score;
}
for(int i = 1; i <= n; i++){
if(school[i] > max){
max = school[i];
k = i;
}
}
printf("%d %d\n", k, max);
return 0;
}

1036 跟奥巴马一起编程

#include<stdio.h>
#include<math.h>

int main(){
int n, row;
char c;
scanf("%d %c", &n, &c);
if(n < 3 || n > 20) return 0;
row = round(n / double(2));
for(int i = 0; i < row; i++){
for(int j = 0; j < n; j++){
if(i == 0 || i == row-1){
if(j ==n-1) printf("%c\n", c);
else printf("%c", c);
}
else {
if(j == 0) printf("%c", c);
else if(j == n-1) printf("%c\n", c);
else printf("%c", ' ');
}
}
}
return 0;
}

1022 D进制的A+B

#include<stdio.h>

int main(){
int a, b, d, i = 0, num[40];
scanf("%d %d %d", &a, &b, &d);
int sum = a + b;
do{
num[i++] = sum % d;
sum = sum / d;
}while(sum != 0);
for(int j = i-1; j >= 0; j--){
printf("%d", num[j]);
}
return 0;
}

1009 说反话

#include<stdio.h>
#include<string.h>

int main(){
char str[90], ans[90][90];
gets(str);
int len = strlen(str), row = 0, col = 0;
for(int i = 0; i < len; i++){
if(str[i] != ' ') ans[row][col++] = str[i];
else{
ans[row][col] = '\0'; //字符数组末尾必须添加结束符'\0',数字数组不需要
row++;
col = 0; //行+1,列恢复至0
}
}
for(int j = row; j >= 0; j--){
printf("%s", ans[j]);
if(j > 0) printf(" ");
}
return 0;
}

#include<cstdio>

int main(){
int word = 0;
char ans[90][90];
while(scanf("%s", ans[word]) != EOF){
word++;
}
for(int j = word-1; j >= 0; j--){
printf("%s", ans[j]);
if(j > 0) printf(" ");
}
return 0;
}

1006 换个格式输出整数

#include<cstdio>

int main(){
int a, n = 0;
char ans[30];
scanf("%d", &a);
if(a <= 0 || a >= 1000) return 0;
for(int i =0; i < a/100; i++) ans[n++] = 'B';
for(int j =0; j < a%100/10; j++) ans[n++] = 'S';
for(int k =1; k <= a%10; k++) ans[n++] = k+'0'; //int转化为char,char(67)是转化成ascii码对应字符
puts(ans);
return 0;
}

#include <stdio.h>
int main()
{
int n,i,h,t,u;
scanf("%d",&n);
h = n / 100;//百位
t = (n % 100) / 10;//十位
u = n % 10;//个位
for(i = 0; i < h; i++){
printf("B");
}
for(i = 0; i < t; i++){
printf("S");
}
for(i = 0; i < u; i++){
printf("%d",i+1);
}
printf("\n");
return 0;
}