算法笔记 胡凡曾磊刷题记录
是个新手,平时刷题代码记录一下,也会记录自己错误的地方
575
A题
A+B问题
#include #include long long to_int(char s[]) { //返回值是long long 型,不是intint len = strlen(s);long long r = 0;int positive = 1;for (int i = 0; i < len; i++) { //','就直接跳过if (s[i] <= '9' && s[i] >= '0') {r = r * 10 + (s[i] - '0'); //字符数组,这里的是字符,需要减去’\0’} else if (s[i] == '-')positive = 0;}if (!positive) r = -r;return r;}int main(){char s[50], r[50];while (scanf("%s %s", s, r) != EOF) {long long snum, rnum;snum = to_int(s);rnum = to_int(r);printf("%lld\n", snum + rnum);}return 0;}
C题 有思考
#include#includeusing namespace std;void number(int t[],int a){int i=0;int j=1000000000,n=20;while(n--){if((a/j)){t[i]=(a/j);a-=j*t[i];i++;j/=10;if(a==0)break;/*t[i]=a%j;t[i]=t[i]/j*10;a-=j*t[i]/10;j*=10;i++;*/}else if(!(a/j) && j>=10){j/=10;}}}long long multiplication(int a1[],int b1[]){int sum=0;for(int i=0;i<20;i++){for(int j=0;j<20;j++){sum+=a1[i]*b1[j];}}return sum;}int main(){int a,b;while(scanf("%d %d",&a,&b)!=EOF){int a1[20],b1[20];fill(a1,a1+20,0);fill(b1,b1+20,0);number(a1,a);number(b1,b);long long result=multiplication(a1,b1);printf("%lld\n",result);}return 0;}
E题
核心发现正循环和逆循环加起来正好等于总的路径长度和
#include
#include
using namespace std;int main()
{int N,a;while(scanf("%d",&N)!=EOF){int a[N+1];for(int i=1;iright){temp=left;left=right;right=temp;}if(leftc2)printf("%d\n",c2);elseprintf("%d\n",c1);}if(left==right)printf("0");/*for(int i=left;;i++){ }*/}}return 0;}
F题
bool型变量为非0即为true,输出句别忘记换行
#include
#include
using namespace std;int main()
{int T,i=0;long long a,b,c;scanf("%d",&T);while(T--){i++;scanf("%lld %lld %lld",&a,&b,&c);if((a+b)>c){printf("Case #%d: true\n",i);}elseprintf("Case #%d: false\n",i);}return 0;}
G题
#include
#include
using namespace std;int main()
{int N;while(scanf("%d",&N)!=EOF){int c1=0,c2=0,c3=0,c4=0,c5=0;int sum1=0,sum2=0,sum4=0,max5=0;int b=0; //这是每次b更新的地方 while(N--){int a; //int b=0不能放在这里 scanf("%d",&a);//第一类 偶数和 if((a%5)==0 && a%2==0){sum1+=a;c1++;}//第二类 交错 if(a%5==1){if(b%2==0)sum2+=a;else if(b%2==1)sum2=sum2-a;b++;c2++;}//第三类 个数 if(a%5==2)c3++;//第四类 平均 if(a%5==3) {sum4+=a;c4++;}//第五类最大 if(a%5==4){if(a>max5)max5=a;c5++;} }double ave=double(sum4)/double(c4);if(c1)printf("%d ",sum1);elseprintf("N ");if(c2)printf("%d ",sum2);elseprintf("N ");if(c3)printf("%d ",c3);elseprintf("N ");if(c4)printf("%.1f ",ave);elseprintf("N ");if(c5)printf("%d\n",max5);elseprintf("N\n");}return 0;}
H题 A+B
法一
#include using namespace std; int P(long long A,int Da){long long Pa=0; //这里的Pa没用long long 导致错误 ,可能是Pa在乘以10的过程中超限了 long long j=1;int n=20000000;//判断A能除以的位数 while(n--){if(jA){j/10;break;}if(j==A)break;}//判断A与Da的关系 while(j>0){if((A/j)==Da){Pa+=Da;Pa*=10;}A-=(A/j)*j; //字母标错 j/=10;}Pa/=10;return Pa;}int main()
{long long A,B;int Da,Db;while(scanf("%lld %d %lld %d",&A,&Da,&B,&Db)!=EOF){long long Pa=0,Pb=0;Pa=P(A,Da);Pb=P(B,Db);printf("%d\n",Pa+Pb);}return 0;
}
法二
#include
#include
using namespace std;
long long p(char a[],char da)
{int lena=strlen(a);int c=0;for(int i=0;i
I题 石头剪刀布
这道题注意输入N后需要吸收空格,因为scanf对输入%c字符时,空格会误认为也是输入,而不是一个字符的结束标志
记录什么赢的那里的数组是整型,同时字符数组初始化可以直接赋值,不写大小,除此之外,本代码中还引入了全局数组。
#include
#include
#include
using namespace std;
char c[]={'B','C','J'}; //字符数组初始化时可直接赋值,这个数组是全局变量
char compare(int a[])
{char m;int k=0;for(int i=0;i<3;i++){if(a[i]>a[k])k=i;}/* if(a[0]>=a[1]){if(a[0]>a[2])m='C';else m='B';}else if(a[0]a[2])m='J';elsem='B';}*/return c[k];
}
int main()
{int N;
// while((scanf("%d",&N))!=EOF)
// {// int c1=0,c2=0;// int lena=strlen(a),lenb=strlen(b);scanf("%d",&N);char a,b;int c1,c2,c3;//只需要记录一个人的数据其实 c1=c2=c3=0;int j[3],y[3]; //记录是用什么字母赢得,用int而不是char,因为我记得是个数 fill(j,j+3,0);fill(y,y+3,0);int N1=N;getchar(); //这个换行重点 while(N1--){// scanf("%c %c",&a,&b); //会认为空格是输入a=getchar();
//scanf("%c", &a);getchar(); //吸收空格 b=getchar(); //getchar用法
//scanf("%c", &b);getchar(); //吸收换行 switch(a) //CJB写成了CJK {case 'C':switch(b){case 'C' :c2++;break;case 'J' :c1++;j[1]++;break;case 'B' :c3++;y[0]++;break;}break; //这里还有break case 'J':switch(b){case 'C' :c3++;y[1]++;break;case 'J' :c2++;break;case 'B' :c1++;j[2]++;break;}break;case 'B':switch(b){case 'C' :c1++;j[0]++;break;case 'J' :c3++;y[2]++;break;case 'B' :c2++;break;}break; //别忘记这个break }}char ma=compare(j),mb=compare(y);printf("%d %d %d\n%d %d %d\n%c %c\n",c1,c2,N-c1-c2,c3,c2,N-c3-c2,ma,mb);//}return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
