期末复习题解3

单词长度

7-10 单词长度 (25分)
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it’s算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
输入格式:
输入在一行中给出一行文本,以.结束
提示:用scanf("%c",…);来读入一个字符,直到读到.为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It’s great to see you here.
输出样例:
4 5 2 3 3 4

注意空格是一个标志点 通过这一点实现单词长度的计算

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
   
    char ch;
    int i=0;
    int flag=0;
    while(scanf("%c",&ch),ch!='.')
    {
   
        if(ch!=' ')i++;//计算每一个单词的长度
        else if(i!=0)
        {
   
           if(flag!=0)//用flag来进行空格的输出
           printf(" ");//其实还有别的好用的方法
           flag=1;
           printf("%d",i);
           i=0;//重置,进行统计下一个单词长度
        }
    }
    if(flag==1&&i!=0) printf(" ");
    if(i) printf("%d",i);//用于输出最后一个单词长度
}

输出闰年

7-11 输出闰年 (25分)
输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入格式:
输入在一行中给出21世纪的某个截止年份。
输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
输入样例1:
2048
输出样例1:
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
输入样例2:
2000
输出样例2:
Invalid year!

判断是否是闰年然后输出 注意21世纪的范围

#include <bits/stdc++.h>
using namespace std;
int main()
{
   
   int y,f=0,i;
   cin>>y;
   if(y>2100||y<=2000)
    printf("Invalid year!");
   else
   {
   
       for(i=2001;i<=y;i++)
       {
   
           if((i%4==0&&i%100!=0)||i%400==0)//判断是否是闰年
           {
   
               printf("%d\n",i);
               f++;
           }
       }
       if(f==0)
        printf("None");
   }
}

找出两个集合中相同的数

7-23 找出两个集合中相同的数 (25分)
给定两个正整数的集合,分别含有m个和n个元素,找出在两个集合中都出现过的数并输出。
输入格式:
第一行输入两个整数m和n,分别表示两个集合中的整数的个数。 第二行输入m个用空格隔开的整数,表示第一个集合中的元素。 第三行输入n个用空格隔开的整数,表示第二个集合中的元素。 保证n和m的值均不超过50000,且集合中所有元素的值大于0且小于等于1000。
输出格式:
找出在两个集合中都有正整数,并按从小到大的顺序输出,每个数后有一个空格。
输入样例:
5 6
2 9 10 7 19
22 10 5 6 7 1
输出样例:
在这里给出相应的输出。例如:
7 10

本题特别鸣谢zyz大佬帮我找到坑点 并认真的讲解简单又正确的思路

#include <iostream>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int v[1005];
int k[1005];
int main()
{
   
  int a,b;
  int n,m,i,j;
  cin>>n>>m;
  for(i=0;i<n;i++)
  {
   
      cin>>a;
      v[a]=1;
  }
  for(j=0;j<m;j++)
  {
   
      cin>>b;
      k[b]=1;
  }
  for(i=1;i<=1000;i++)
  {
   
      if(v[i]==1&&k[i]==1)
      {
   
          cout<<i<<" ";
      }
  }
}

输入一个字符串转换成十进制整数

7-24 输入一个字符串转换成十进制整数 (25分)
输入一个字符串,它可能是2–16进制数中一种进制数的表示,计算它对应的10进制数可能的最小值。例如,“151”可以是6–16进制中任何一种进制数的表示。 对应的10进制数可能的最小值就是67,也就是把它当成6进制。
输入格式:
输入一行字符串,仅由‘0’–‘9’和‘A’–'F’这些字符组成,保证转换后对应的10进制数在int范围内。
输出格式:
输出一个整数,为字符串对应10进制数可能的最小值。
输入样例:
213
输出样例:
39

根据题意要尽可能将字符串当成最小的进制
我们知道2进制中只有0,1而3进制中只有0,1,2所以可以访问字符串中出现的最大的字符 求其对应的最小进制 再转化为10进制即可

#include <iostream>
#include<cmath>
#include<bits/stdc++.h>
using namesp
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值