A题 lk&求和
题目链接 Hcode OnlineJudge
for循环算总和, 不多说
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int count = 0;
int i;
for(i = 1;i <= n;i++){
count += i;
}
printf("%d",count);
return 0;
}
B题 输出三角形
双重循环, 注意换行
题目链接 Hcode OnlineJudge
#include<stdio.h>
int main()
{
int a,i,j;
scanf("%d",&a);
for(i=0;i<a;i++){
for(j=0;j<=i;j++){
printf("*");
}printf("\n");
}
return 0;
}
C题 关于学姐穿越的这件事
题目链接 Hcode OnlineJudge
注意这里是中文的感叹号, 建议直接复制题目中的, 签到题不多说
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int i;
for(i = 0;i < n; i++){
printf("迪迦奥特曼变身!\n");
}
return 0;
}
D题 关于这个世界上最帅的男人
题目链接 Hcode OnlineJudge
判断质数, 注意1并不是质数, 这题没有卡时间, 随便暴力
#include <stdio.h>
int main(){
int n;
int i;
int bcd = 1;
scanf("%d",&n);
for(i = 2 ;i < n;i++){
if(n % i ==0){
bcd = 0;
break;
}
}
if(bcd == 1 && n != 1)
printf("YES");
else
printf("NO");
return 0;
}
E题 这是个悲伤的事情
同A题, 求1到n累加
题目链接 Hcode OnlineJudge
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int i;
int count = 0;
for(i = 1;i <= n;i++){
count += i;
}
printf("%d",count);
return 0;
}
F题 麻瓜学魔法
题目链接 Hcode OnlineJudge
注意输入
输入描述
输入一个数字n(1<=n<=1e9)
输入是包括1 的, 需要注意输入1的时候为0
#include<stdio.h>
int main(){
long long n,m=0;
scanf("%lld",&n);
if(n==1){
printf("当然是0次啦!我才不是麻瓜呢");
}
else{
while(n!=1){
if(n%2!=0){
n=3*n+1;
m++;
}
else{
n=n/2;
m++;
}
}
printf("当然是%lld次啦!我才不是麻瓜呢",m);}
return 0;
}
G题 浅浅的算一个平均数吧
题目链接 Hcode OnlineJudge
计算平均数, 结果保留3位小数
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a;
int sum=0;
int com=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a);
sum+=a;
com++;
}
double b;
b=1.0*sum/com;
printf("%.3f",b);
return 0;
}
H题 坤坤的课后作业题
题目链接 Hcode OnlineJudge
前导零的输出方式在输出那一课就有讲, 其余思路和B题基本一致
#include <stdio.h>
int main(){
int i,j;
int n;
int count = 0;
scanf("%d",&n);
for(i = n;i>=1;i--){
for(j = 1;j <= i;j++ ){
count+=1;
if(count < 10)
printf("0%d",count);
else
printf("%d",count);
}
printf("\n");
}
return 0;
}
I题 lk学整除
题目链接 Hcode OnlineJudge
我出的防ak题防住了hh, 毕竟是防ak题, 是给拔尖的人写的, 请各位量力而行
这里稍微提一下时间复杂度, 一般来说, for循环循环一次是O(1)的复杂度, O()为一秒
我们来看看题目中的数据范围
输入描述
第一行输入一个数T(0<T<10)代表有T组案例
第2~t+1行 每行输入一个测试数据n(1<n<)
我们来看看大部分同学的代码
#include <stdio.h>
int main(){
int T;
int i;
long long n;
long long count = 0;
scanf("%d",&T);
while(T--){
scanf("%lld",&n);
for(i = 2;i<n;i++){
if(num % i == 0){
count++;
}
}
printf("%lld\n",count);
count = 0;
}
return 0;
}
for循环n次, 再加上while的T次, 这个代码的复杂度就是O(T*n)按照最大的数据来算的话这个代码的复杂度是O(), 估算成秒就是100000秒约为3个小时, 是非常低的效率
了解了问题, 那要怎么降低这题的复杂度呢?
相信大家都知道如何缩短时间判断质数的方法---就是用sqrt(n)来缩短循环次数达到降低时间复杂度的目的
让我们回到这题, 这题是判断一个数有多少个因子, 和判断质数有异曲同工之妙, 只要在for里面加一个累加变量就好了. 还有一个要点, 一个数的因子数量, 除了算术平方根以外都是成对出现的
比如:
10=2 * 5 2和5都是10的因子
100= 20*5 20和5也都是100的因子, 10*10也是100的因子
要点就在于算术平方根下数的因子最多存在1个, 而不是出现2个
啊对这题还顺手卡了long long
#include <stdio.h>
int main(){
long long T;
long long i;
long long num;
long long count = 0;
scanf("%lld",&T);
while(T--){
scanf("%lld",&num);
for(i = 2;i*i <=num;i++){
if(num % i == 0){
if(i*i == num)
count++;
else
count+=2;
}
}
printf("%lld\n",count);
count = 0;
}
return 0;
}
J题 字符菱形
题目链接 Hcode OnlineJudge
直接输出就行...别被题目骗了
#include<stdio.h>
int main(){
char c;
scanf("%c",&c);
printf(" %c\n",c);
printf(" %c%c%c\n",c,c,c);
printf("%c%c%c%c%c\n",c,c,c,c,c);
printf(" %c%c%c\n",c,c,c);
printf(" %c\n",c);
return 0;
}
当然你用for循环输出也是可以的, 我们也提倡这么做
#include<stdio.h>
int main()
{
char a;
scanf("%c",&a);
for(int i=0;i<5;i++)
{
if(i<3)
{
for(int t=0;t<3+i;t++)
{
if(t<2-i)
{ printf(" ");}
else
{
printf("%c",a);
}
} printf("\n");
}
else{
for(int j=1;j<8-i;j++)
{
if(j<=i-2)
{
printf(" ");
}
else
{
printf("%c",a);
}
}printf("\n");
}
}
return 0;
}