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");
}