20220331简单题

20220331简单题

1.HJ6

1.1题目

请添加图片描述

1.2我的解法

python:

# 不想把C翻译过来了

C语言:

#include<stdio.h>

int isPrimer(int a);

int main(){
    int n;
    scanf("%d",&n);
    while(n>1){
        for(int i=2;i<=n;i++){
            if(n%i==0){
                if(isPrimer(i)==1){
                    printf("%d ",i);
                    n = n/i;
                    break;
                }
            }
        }
    }
    return 0;
}

int isPrimer(int a){
    if(a==2){
        return 1;
    }
    for(int i=2;i*i<a;i++){
        if(a%i!=0){
            continue;
        }
        else{
            return 0;
        }
    }
    return 1;
}
  • 报错数据:2000000014,超过时间限制

1.3改进与优化

#include<stdio.h>
#include<math.h>
  
int main()
{
    int a, b, i = 0;
    scanf("%d", &a);
    for (b = 2; b <= a; b++)
    {
       //最小质数因子必小于输入数字的平方根
        if(b>sqrt(a)+1)
        {
            b=a;
        }
        while (a % b == 0)
        {
            printf("%d ",b);
            a = a / b;
        }
    }
    return 0;
}
  • 居然不用判断是不是质数,傻了

2.HJ8

2.1题目

请添加图片描述

2.2我的解法

python:

n = int(input())

dic = {}
for i in range(n):
    index,value = map(int,input().split())
    if index in dic.keys():
        dic[index] = dic[index] + value
    else:
        dic[index] = value
for i in sorted(dic): 
        print(i, dic[i])

C语言:

#include<stdio.h>
#include<stdlib.h>

struct dic{
    int index;
    int value;
};

int inDic(struct dic* d,int index,int n);
void sortDic(struct dic* d,int n);
int findIndex(struct dic* d,int index,int n);

int main(){
    int n,count=0;
    scanf("%d",&n);
    struct dic *d = (struct dic*)malloc(sizeof(struct dic)*n);
    for(int i=0;i<n;i++){
        int temp_index,temp_value;
        scanf("%d %d",&temp_index,&temp_value);
        int temp = findIndex(d,temp_index,count);
        if(inDic(d,temp_index,count)){
            d[temp].value += temp_value;
        }
        else{
            d[count].index = temp_index;
            d[count].value = temp_value;
            count++;
        }
    }
    
    sortDic(d,count);
    
    for(int i=0;i<count;i++){
        printf("%d %d\n",d[i].index,d[i].value);
    }
    
    return 0;
}

int inDic(struct dic* d,int index,int n){
    for(int i=0;i<n;i++){
        if(d[i].index==index){
            return 1;
        }
    }
    return 0;
}

int findIndex(struct dic* d,int index,int n){
    for(int i=0;i<n;i++){
        if(d[i].index==index){
            return i;
        }
    }
    return 0;
}

void sortDic(struct dic* d,int n){
    int temp_index,temp_value;
    for(int i=0;i<n;i++){
        for(int j=i;j<n;j++){
            if(d[i].index>d[j].index){
                temp_index = d[i].index;
                temp_value = d[i].value;

                d[i].index = d[j].index;
                d[i].value = d[j].value;

                d[j].index = temp_index;
                d[j].value = temp_value;
            }
            
        }
    }
}

2.3改进与优化

  • 将赋值用一条语句表示:
if index in dic.keys():
    dic[index] = dic[index] + value
else:
    dic[index] = value
--->
dic[index] = dic.get(index, 0) + value

3.HJ10

3.1题目

请添加图片描述

3.2我的解法

python:

s = input()
result = ''
for i in s:
    if i not in result:
        result += i
print(len(result))

C语言:

#include<stdio.h>

int main(){
    int visited[128] = {0};
    char temp;
    int result = 0;
    while(scanf("%c",&temp)!=EOF){
        if(visited[temp]==0&&temp!='\n'){
            visited[temp] = 1;
        }
    }
    
    for(int i=0;i<128;i++){
        if(visited[i]==1){
            result += 1;
        }
    }
    printf("%d",result);
    return 0;
}

4.HJ11

4.1题目

请添加图片描述

4.2我的代码

python:

a = input()
print(a[::-1])

C语言:

#include<stdio.h>

int main(){
    int n,a[100];
    int i=0;
    scanf("%d",&n);
    if(n==0){
        a[0] = 0;
        i = 1;
    }
    while(n!=0){
        int temp = n%10;
        a[i] = temp;
        i++;
        n = n/10;
    }
    
    for(int j=0;j<i;j++){
        printf("%d",a[j]);
    }
    return 0;
}

4.3改进与优化

  • C语言情况忽略了n=0的情况
  • 两种很强的:
// 第一种
#include <stdio.h>
int main()
{
    char str[32] = {0};
    scanf("%s",str);
    //gets(str);
    for(int i=strlen(str)-1;i>=0;i--)
    {
        printf("%c",str[i]);
    }
    printf("\n");
}
// 第二种
#include<stdio.h>
int main(){
    int num = 0;
    scanf("%d\n",&num);
    if(num == 0) printf("%c",'0');
    while(num != 0){
        printf("%c",num%10+'0');
        num/=10;
    }
    printf("\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔耳袋狸Bilby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值