目录
7-1 计算指数
这道题就直接用pow()函数即可。
#include<stdio.h>
#include<math.h>
int main()
{
int n;
int s=1;
scanf("%d", &n);
s=pow(2, n);
printf("2^%d = %d\n", n, s);
return 0;
}
7-2 计算摄氏温度
这道题就是直接把100带入题目给出的公式即可。
#include<stdio.h>
int main()
{
int c=0;
c=5*(100-32)/9;
printf("fahr = 100, celsius = %d", c);
return 0;
}
7-3 念数字
这道题我一开始就是直接用if-else写的,不过速度比较慢,代码也比较繁琐。
#include<stdio.h>
#include<string.h>
int main()
{
int l;
char b[110];
scanf("%s", b);
l=strlen(b);
for(int i=0;i<l;i++)
{
if(b[i]=='-')
printf("fu");
else
{
if(b[i]=='0')
printf("ling");
if(b[i]=='1')
printf("yi");
if(b[i]=='2')
printf("er");
if(b[i]=='3')
printf("san");
if(b[i]=='4')
printf("si");
if(b[i]=='5')
printf("wu");
if(b[i]=='6')
printf("liu");
if(b[i]=='7')
printf("qi");
if(b[i]=='8')
printf("ba");
if(b[i]=='9')
printf("jiu");
}
if(i!=l-1)
printf(" ");
}
printf("\n");
return 0;
}
其实直接打表会更快更简洁。
#include<stdio.h>
#include<string.h>
char a[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main()
{
int l;
char b[110];
scanf("%s", b);
l=strlen(b);
for(int i=0;i<l;i++)
{
if(b[i]=='-')
printf("fu");
else
{
printf("%s", a[b[i]-'0']);
}
if(i!=l-1)
printf(" ");
}
printf("\n");
return 0;
}
7-4 求阶乘累加和
这道题我用的是前缀和的方法,即用两个数组,一个用来记录1-n的每个数的值,另一个用来记录其对应的阶层和的值。然后把后者进行求和就行。
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int a[n];
int b[n];
long long s=0;
for(int i=1;i<=n;i++)
{
a[i-1]=i;
if(i==1)
b[i-1]=a[i-1];
else
{
b[i-1]=a[i-1]*b[i-2];
}
s+=b[i-1];
}
printf("%lld", s);
return 0;
}
7-5 6翻了
这道题就是去判断连续的6或者9是否满足变化的条件,满足则改变输出,否则输出原字符串中的元素。
#include<stdio.h>
#include<string.h>
int main()
{
char a[1010];
gets(a);
int l=strlen(a);
for(int i=0;i<l;i++)
{
if(a[i]!='6'&&a[i]!='9')
printf("%c", a[i]);
else
{
int k6;
int k9;
if(a[i]=='6')
{
k6=1;
for(int o=i+1;o<l;o++)
{
if(a[o]!='6')
break;
else
k6++;
}
if(k6>3&&k6<=9)
{
printf("9");
i=i+(k6-1);
}
else if(k6>9)
{
printf("27");
i=i+(k6-1);
}
else if(k6<=3)
{
for(int p=0;p<k6;p++)
printf("6");
i=i+(k6-1);
}
}
if(a[i]=='9')
{
k9=1;
for(int o=i+1;o<l;o++)
{
if(a[o]!='9')
break;
else
k9++;
}
if(k9>3)
{
printf("27");
i=i+(k9-1);
}
else if(k9<=3)
{
for(int p=0;p<k9;p++)
printf("9");
i=i+(k9-1);
}
}
}
}
printf("\n");
return 0;
}
7-6 福到了
这道题我的想法就是开两个数组,一个用来存题目给出的原字符串,另一个用来存原数组倒置后的字符串,然后,判断遍历两数组看是否相同,相同则多输出一句"bu yong dao le",否则不输出此句。
#include<stdio.h>
#include<string.h>
int main()
{
char c;
int n;
scanf("%c %d", &c, &n);
char a[n][n];
char b[n][n];
getchar();
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%c", &a[i][j]);
b[n-1-i][n-1-j]=a[i][j];
}
getchar();
}
int k=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]!=b[i][j])
{
k=1;
break;
}
}
}
if(k==0)
printf("bu yong dao le\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(b[i][j]!=' ')
printf("%c", c);
else
printf("%c", b[i][j]);
}
printf("\n");
}
}
7-7 估值一亿的AI核心代码
这道题我没有ac,有一个示例没过,该示例应该是全为空格的情况,我尝试了好几种输出但还是没过的了T~T。。。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
getchar();
for(int i=0;i<n;)
{
char a[1010];
cin.getline(a, 1010);
int l=strlen(a);
printf("%s\n", a);
printf("AI: ");
for(;;)
{
if(a[0]==' ')
{
for(int j=0;j<l-1;j++)
{
a[j]=a[j+1];
}
l-=1;
if(l==0)
goto tiao;
}
else
break;
}
for(int j=0;j<l;)
{
if(a[j]>='A'&&a[j]<='Z'&&a[j]!='I')
a[j]+=32;
if(a[j]==' ')
{
if((j+1>=l)||(j+1<l&&(a[j+1]==' '||a[j+1]=='?'||a[j+1]=='!'||a[j+1]==','||a[j+1]=='\'')))
{
for(int o=j;o<l-1;o++)
{
a[o]=a[o+1];
}
a[l-1]=' ';
l-=1;
continue;
}
}
j++;
}
for(int j=0;j<l;)
{
if(a[j]=='?')
{
printf("!");
j++;
continue;
}
if(a[j]=='I')
{
if((j-1<0||((j-1>=0)&&
(a[j-1]==' '||a[j-1]=='?'||a[j-1]=='!'||a[j-1]==','||a[j-1]=='\'')))&&
(j+1>=l||((j+1<l)&&
(a[j+1]==' '||a[j+1]=='?'||a[j+1]=='!'||a[j+1]==','||a[j+1]=='\''))))
{
printf("you");
j++;
continue;
}
}
if(j+1<l&&a[j]=='m'&&a[j+1]=='e')
{
if((j-1<0||((j-1>=0)&&
(a[j-1]==' '||a[j-1]=='?'||a[j-1]=='!'||a[j-1]==','||a[j-1]=='\'')))&&
(j+2>=l||((j+2<l)&&
(a[j+2]==' '||a[j+2]=='?'||a[j+2]=='!'||a[j+2]==','||a[j+2]=='\''))))
{
printf("you");
j+=2;
continue;
}
}
if(j+6<l&&a[j]=='c'&&a[j+1]=='a'&&a[j+2]=='n'
&&a[j+3]==' '&&a[j+4]=='y'&&a[j+5]=='o'&&a[j+6]=='u')
{
if((j-1<0||((j-1>=0)&&
(a[j-1]==' '||a[j-1]=='?'||a[j-1]=='!'||a[j-1]==','||a[j-1]=='\'')))&&
(j+7>=l||((j+7<l)&&
(a[j+7]==' '||a[j+7]=='?'||a[j+7]=='!'||a[j+7]==','||a[j+7]=='\''))))
{
printf("I can");
j+=7;
continue;
}
}
if(j+8<l&&a[j]=='c'&&a[j+1]=='o'&&a[j+2]=='u'&&a[j+3]=='l'&&a[j+4]=='d'
&&a[j+5]==' '&&a[j+6]=='y'&&a[j+7]=='o'&&a[j+8]=='u')
{
if((j-1<0||((j-1>=0)&&
(a[j-1]==' '||a[j-1]=='?'||a[j-1]=='!'||a[j-1]==','||a[j-1]=='\'')))&&
(j+9>=l||((j+9<l)&&
(a[j+9]==' '||a[j+9]=='?'||a[j+9]=='!'||a[j+9]==','||a[j+9]=='\''))))
{
printf("I could");
j+=9;
continue;
}
}
printf("%c", a[j]);
j++;
}
printf("\n");
tiao:
i++;
}
return 0;
}
7-8 前世档案
这道题我的思路就是去检索n在字符串中出现的位置。
由二叉树的性质,我们可以很容易的分析得出:每出现一个n,其对应编号就要增加n-1-j,其中n为此串字符串的长度,j为当前n所对应的下标。
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int n, m;
scanf("%d%d", &n, &m);
for(int i=0;i<m;i++)
{
char a[n+1];
scanf("%s", a);
int k=1;
int l=strlen(a);
for(int j=0;j<n;j++)
{
if(a[j]=='n')
{
k+=pow(2, n-1-j);
}
}
printf("%d\n", k);
}
return 0;
}
7-9 抢红包
这道题我的思路就是用一个结构体数组去存储每一个人所抢到的红包个数以及金额,还有就是其所支出的金额。在统计结束后,用其所得金额减去支出金额即为其所收入的金额,然后使用结构体排序,然后进行输出即可。
关于结构体排序可以看一下这篇:结构体的排序-CSDN博客
#include<stdio.h>
#include<algorithm>
using namespace std;
struct nuu
{
int bianhao;
long long qiangru=0;
long long geshu=0;
long long zhichu=0;
long long qian;
};
int main()
{
int n;
scanf("%d", &n);
nuu a[10100];
for(int i=0;i<n;i++)
{
int k;
scanf("%d", &k);
a[i].bianhao=i+1;
for(int j=0;j<k;j++)
{
int bianhao_i;
long long jing_e;
scanf("%d%lld", &bianhao_i, &jing_e);
//printf("%d %d\n", bianhao_i, jing_e);
//a[bianhao_i-1].bianhao=bianhao_i;
a[bianhao_i-1].geshu++;
a[bianhao_i-1].qiangru+=jing_e;
a[i].zhichu+=jing_e;
}
}
for(int i=0;i<n;i++)
{
a[i].qian=a[i].qiangru-a[i].zhichu;
}
sort(a, a+n, [](nuu ai, nuu bi){
return ai.qian>bi.qian||(ai.qian==bi.qian&&(ai.geshu>bi.geshu||(ai.geshu==bi.geshu&&ai.bianhao<bi.bianhao)));
});
for(int i=0;i<n;i++)
{
printf("%d ", a[i].bianhao);
if(a[i].qian<0)
{
a[i].qian=-a[i].qian;
printf("-");
}
printf("%01lld.%.2lld\n", a[i].qian/100, a[i].qian%100);
}
return 0;
}