算法经典入门--3

上机练习

习题3-3乘积的末三位

#include<iostream>
#include<cstdio>
#include<cstring>
#define MOD 1000
using namespace std;
main()
{
   char a[100];
   int sum=0,ssum=1;
   int num[100];
   int n=0;
   while(scanf("%s",a)!=EOF)
   {
       int len=strlen(a);//字符串转化为数
       int i;
       for( i=0;i<len;i++)
       {
           if(a[i]>='A'&&a[i]<='Z') break;//逻辑
           if(a[i]=='-'||a[i]=='+')continue;
           if(a[i]-'0'>=0&&a[i]-'0'<=9)
            sum=(sum*10+a[i]-'0')%MOD;
       }
        if(a[i]>='A'&&a[i]<='Z') continue;//逻辑
        ssum=ssum*sum%MOD;
        sum=0;
   }
   printf("%d",ssum);

}

习题3-4 计算器

#include<iostream>
#include<cstdio>
#include<cstring>
#define MOD 1000
using namespace std;
int main()
{
    char s[100];
    while(cin>>s){
        int i,j,a=0,b=0;
        int sum=0;
        int n=strlen(s);
       for(i=0;i<n;i++)
       {
            if(s[i]-'0'>=0&&s[i]-'0'<=9)
                a=a*10+s[i]-'0';
            if(s[i]=='+'){
               j=0;
               break;
            }
             if(s[i]=='-'){
               j=1;
               break;
            }
             if(s[i]=='*'){
               j=2;
               break;
            }
       }
       for(;i<n;i++)
       {
           if(s[i]-'0'>=0&&s[i]-'0'<=9)
                b=b*10+s[i]-'0';
       }
       switch(j)
       {
       case 0:
        sum=a+b;
        break;
       case 1:
        sum=a-b;
        break;
       case 2:
        sum=a*b;
        break;
       }
       printf("%d\n",sum);
    }

}

习题3-5.m*n矩阵转90度

左转90度

(1)#include<cstdio>
#include<iostream>
#include<cstring>
int main(){
int m,n,b[10][10];
int a[10][10];
scanf("%d%d",&m,&n);
int i,j;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
b[n-j+1][i]=a[i][j];
}


for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(j!=m)
printf("%d ",b[i][j]);
else{
printf("%d\n",b[i][j]);
}
}
}//原第i行等于现第i列,找规律得原第j列等于现第(n-j+1)行;

右转90度

#include<cstdio>
#include<iostream>
#include<cstring>
int main(){
int m,n,b[10][10];
int a[10][10];


scanf("%d%d",&m,&n);
int i,j;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
b[j][m-i+1]=a[i][j];
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
if(j!=n)
printf("%d ",a[i][j]);
else{
printf("%d\n",a[i][j]);
}
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(j!=m)
printf("%d ",b[i][j]);
else{
printf("%d\n",b[i][j]);
}
}
}//原第j列等于现第j行,原第i行等于现第m-i+1列,

3-8手机键盘

#include <stdio.h>
#include<string.h>
#include<math.h>
int main ()
{
    char *p,*s[8]={"abc","def","ghi","jkl","mno","pqr","stu","vwxyz"};
    char word[10];
    fgets(word,sizeof(word),stdin);//输入
    int n=strlen(word);
    int i,j;
    for( i=0;i<n;i++)
    {
        for(j=0;j<8;j++)

        if(p=strchr(s[j],word[i]))//strchr(*str,character)返回第一个character的指针

        {

              printf("%c%d",word[i],p-s[j]+1);  
        }
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值