20220330 入门题
20220330 入门题
1.HJ58
1.1题目
1.2我的解法
python:
n,k = input().split()
n = int(n)
k = int(k)
a = input().split()
a = [int(i) for i in a]
a.sort()
for i in range(k):
print(str(a[i])+' ',end='')
C语言:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,k;
scanf("%d %d",&n,&k);
int *a = (int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(a[i]>a[j]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(int i=0;i<k;i++){
printf("%d ",a[i]);
}
return 0;
}
1.3改进与优化
python:
- 该题未叙述是否只实现一次功能还是多次,需要考虑周全使用循环避免,即:
while True:
try:
#功能模块
except:
break
- 输入功能可优化为:
n,k = input().split()
n = int(n)
k = int(k)
--->
n,k = map(int,input().split())
a = input().split()
a = [int(i) for i in a]
--->
a = list(map(int,input().split()))
C语言:
- 循环使用:
while(scanf("%d %d",&n,&k)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
//功能模块
//输出模块
}
- 排序算法选择:冒泡、快排、堆排序…
1.4改进解法
python:
while True:
try:
n,k = map(int,input().split())
a = list(map(int,input().split()))
a.sort()
for i in range(k):
print(str(a[i])+' ',end='')
except:
break
C语言:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,k,i,j;
while(scanf("%d %d",&n,&k)!=EOF){
int *a = (int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++){
for(j=i;j<n;j++){
if(a[i]>a[j]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<k;i++){
printf("%d ",a[i]);
}
}
free(a)
return 0;
}
2.HJ101
2.2题目
2.2我的解法
python:
while True:
try:
n = int(input())
a = list(map(int,input().split()))
flag = int(input())
if flag==0:
a.sort()
else:
a.sort(reverse=True)
for i in range(n):
print(str(a[i])+' ',end='')
except:
break
C语言:
#include<stdio.h>
#include<stdlib.h>
void swap(int *a,int *b);
void sort(int a[],int n,int flag);
int main(){
int n,flag,i;
while(scanf("%d",&n)!=EOF){
int *a = (int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&flag);
sort(a,n,flag);
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
}
free(a)
return 0;
}
void swap(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void sort(int a[],int n,int flag){
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(flag==0){
if(a[i]>a[j]){
swap(&a[i],&a[j]);
}
}
else{
if(a[i]<a[j]){
swap(&a[i],&a[j]);
}
}
}
}
}
2.3改进与优化
python:
- 输出
for i in range(n):
print(str(a[i])+' ',end='')
--->
print(' '.join(a))
C语言:
- swap函数写错了,大三了swap函数都不会写!哭泣
void swap(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
}
3.HJ7
3.1题目
3.2我的解法
python:
a = float(input())
a_part = a-int(a)
if a_part>=0.5:
result = int(a)+1
else:
result = int(a)
print(result)
C语言:
#include<stdio.h>
int main(){
double a,a_part;
int result;
scanf("%lf",&a);
a_part = a-(int)a;
if(a_part>=0.5){
result = (int)a+1;
}
else{
result = (int)a;
}
printf("%d",result);
return 0;
}
3.3改进与优化
- 居然可以直接加0.5然后取整
4.HJ46
4.1题目
4.2我的解法
python:
s = list(input())
n = int(input())
print(''.join(s[:n]))
C语言:
#include<stdio.h>
#include<stdlib.h>
int main(){
int max_size = 1001;
int i,k=0;
char *s = (char *)malloc(sizeof(char)*max_size);
scanf("%s",s);
scanf("%d",&k);
for(i=0;i<k;i++){
printf("%c",s[i]);
}
free(s);
return 0;
}
4.3我的改进
python:
while True:
try:
s = input()
n = int(input())
print(s[:n])
except:
break
C语言:
#include<stdio.h>
#include<stdlib.h>
int main(){
int max_size = 1001;
int i,k=0;
char *s = (char *)malloc(sizeof(char)*max_size);
while(scanf("%s%d",s,&k)!=EOF){
for(i=0;i<k;i++){
printf("%c",s[i]);
}
memset(s,'\0',max_size);
}
free(s);
return 0;
}
5.HJ9
5.1题目
5.2我的解法
python:
a = input()
a_new = ''
for i in range(len(a)-1,-1,-1):
if a[i] not in a_new:
a_new += a[i]
else:
continue
print(a_new)
C语言:
#include<stdio.h>
int isRepeat(int a[],int c,int n);
int main(){
int n,temp,count=0,b_count=0;
int a[8],b[8];
scanf("%d",&n);
while(n!=0){
temp = n%10;
a[count] = temp;
n = n/10;
count++;
}
for(int i=0;i<count;i++){
if(isRepeat(b, a[i], b_count)==0){
b[b_count] = a[i];
b_count++;
}
}
for(int i=0;i<b_count;i++){
printf("%d",b[i]);
}
return 0;
}
int isRepeat(int a[],int c,int n){
for(int i=0;i<n;i++){
if(a[i]==c){
return 1;
}
}
return 0;
}
5.3改进与优化
- 可以用集合去重,再根据原来列表的顺序进行排序:
a = list(input()[::-1])
b = list(set(a))
b.sort(key = a.index)
print(''.join(b))
- 这个好聪明
#include <stdio.h>
int main(void) {
int data = 0;
scanf("%d", &data);
int map[10] = {0};
while (data != 0) { // 判断是否处理了最高位
int temp = data%10;
if (map[temp] == 0) { // 判断这一位 是否已经出现过
map[temp]++;
printf("%d", temp);
}
data = data/10; // 个位 -> 十位 -> 百位
}
return 0;
}