20220401简单题
20220401简单题
1.HJ12
1.1题目
1.2我的解法
python:
s = input()
print(s[::-1])
C语言:
#include<stdio.h>
#include<string.h>
int main(){
char a[1001]={0};
scanf("%s",a);
int len = strlen(a);
for(int i=len-1;i>=0;i--){
printf("%c",a[i]);
}
return 0;
}
1.3改进与优化
- 可以使用reversed函数
2.HJ13
2.1题目
2.2我的解法
python:
a = input().split(' ')
a.reverse()
print(' '.join(a))
C语言:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(){
char s[1001] = {0};
char s_temp[100] = {0};
gets(s);
for(int i=strlen(s)-1;i>=0;i--){
if(s[i] == ' '){
for(int j=strlen(s_temp)-1;j>=0;j--){
printf("%c",s_temp[j]);
}
printf(" ");
memset(s_temp,'\0',100);
}
else{
s_temp[strlen(s_temp)] = s[i];
}
}
for(int j=strlen(s_temp)-1;j>=0;j--){
printf("%c",s_temp[j]);
}
}
2.3改进与优化
- 好厉害
#include<stdio.h>
#include<stdlib.h>
#define MAX_LEN_ONE_CHARS 25
#define MAX_COUNT_ONE_STRING 40
int main(void)
{
char str[MAX_COUNT_ONE_STRING][MAX_LEN_ONE_CHARS] = {0};
int i = 0;
// 一个个单词入栈
while(scanf("%s", str[i]) != EOF) {
i++;
}
// 从最后一个个单词出栈,打印加上空格
for (int j = i - 1; j >= 0; j--) {
printf("%s ", str[j]);
}
printf("\n");
}
3.HJ14
3.1题目
3.2我的解法
python:
a = []
n = int(input())
for i in range(n):
temp = input()
a.append(temp);
a.sort()
print('\n'.join(a))
C语言:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int n,count=0;
char words[1001][101] = {0};
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s",words[i]);
}
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(strcmp(words[i],words[j])>0){
char temp_word[100];
strcpy(temp_word,words[i]);
strcpy(words[i],words[j]);
strcpy(words[j],temp_word);
}
}
}
for(int i=0;i<n;i++){
printf("%s\n",words[i]);
}
return 0;
}
3.3改进与优化
- 怎么使用动态二维数组
- qsort函数直接排序
4.HJ15
4.1题目
4.2我的解法
python:
n = int(input())
count = 0
while n!=0:
if n%2==1:
count += 1
n = n >> 1
print(count)
C语言:
#include<stdio.h>
int main(){
int n,count=0;
scanf("%d",&n);
for(int i=0;i<32;i++){
if(n&0x1){
count++;
}
n = n >> 1;
}
printf("%d",count);
return 0;
}
4.3改进与优化
-
可以转化为二进制来计算1的个数
-
要搞清楚int型在计算机中怎么存储的,如果是存储的负数怎么应对
-
位运算怎么做?
4.4位运算
python与C语言中的位运算符:
这些运算符按二进制位对值进行操作
-
&:按位与运算符,参与运算的两个值,如果两个相应位都是1,则该位的结果是1,否则为0;
-
|:按位或运算符,只要对应的两个二进位有一个为1时,结果位就为1;
-
^:按位异或运算符,当对应的两个二进位相异时,结果位为1;
-
~:按位取反运算符,对数据的每个二进位取反,即把1变成0,把0变成1;
-
<<:左位移,运算数的各个二进位全部左移若干位,由<<右边的数字指定了移动的位数,高位丢弃,低位补0
-
>>:右位移,运算数的各个二进位全部右移若干位,>>右边的数字指定了移动的位数
-
如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方。
-
如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的位中经常会包含 1)。