🚀write in front🚀
📝个人主页:认真写博客的夏目浅石.
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:夏目的作业
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️如果无聊的话,就来逛逛我的博客栈吧stack-frame.cn
文章目录
- 前言
- 6-1 不一样的A-B
- 6-2 不一样的斐波那契数列
- 6-3 反素数
- 6-4 范围水仙花数
- 6-5 公约数和公倍数
- 6-6 进制转换
- 6-7 绝对值排序
- 6-8 连接字符串
- 6-9 求次方
- 6-10 求阶乘
- 6-11 求母牛数
- 6-12 求素数
- 6-13 求最大值
- 6-14 数字求和
- 6-15 数字转换
- 6-16 巫妖王的愤怒
- 6-17 字符串逆序
- 6-18 字母统计
- 结语
前言
我是夏目浅石,本次作业将由我来给大家讲解第六章作业
,希望大家可以吃透这些题目,遇见更好的自己
6-1 不一样的A-B
题目描述:
/*
大致题意:给定两个数字n,m,然后从 a数组 里面找 b数组 一样的数字进行删除
如果 不一样的 就直接从小到大输出 若全部被删除 就输出NULL
*/
void cn(int n,int m)
{
int a[110],b[110],c[110];
int k=0;
//输入部分
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int j=0;j<m;j++) scanf("%d",&b[j]);
//算法设计部分
/*
写下我的思路:
1.遍历 数组a
2.把不一样的 存放到新数组 c数组 里面 方法:flag标记法
3.排序输出 c数组 里面的内容
*/
//遍历+存放
for(int i=0;i<n;i++)
{
int flag=0;
for(int j=0;j<m;j++)
{
if(a[i]==b[j])
{
flag=1;
break;
}
}
if(flag==0) c[k++]=a[i];
}
//判断是否为NULL
if(k==0) printf("NULL\n");
else
{
//显然对于 c数组 进行排序
//冒泡排序
for(int i=0;i<k-1;i++)
{
int j=0;
for(j=0;j<k-1-i;j++)
{
if(c[j]>c[j+1])
{
int tmp=c[j];
c[j]=c[j+1];
c[j+1]=tmp;
}
}
}
//输出部分
for(int i=0;i<k;i++) printf("%d ",c[i]);
}
}
6-2 不一样的斐波那契数列
题目描述:
/*
大致题意:类似于 斐波那契数列 考察你的递归 but 变化了f1,f2.
*/
int cn(int n)
{
//设置新的起始值
int f1=7,f2=11,f;
//讨论情况
if(n==0)
return f1;
if(n==1)
return f2;
else
f=cn(n-1)+cn(n-2);
return f;
}
6-3 反素数
/*
基础知识:
1.素数的定义:素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
2.反素数的定义:在一个区间内,因子最多的数(并且因子个数相同的时候值最小),
所以反素数是相对于一个集合来说的。
题目意思:就是在一个区间里面 找到 谁的因子 最多 然后不断迭代。
*/
int cn(int a,int b)
{
//定义 + 初始化
int ans=0,max=a;
//遍历区间 [a,b]
for(int i=a;i<=b;i++)
{
int cnt=0; //记录 因子个数
for(int j=2;j<=i;j++) //暴力 遍历求因子
{ //优化 j<=i/2
if(i%j==0) cnt++;
}
//这里 ans 表示 我所记录的上一个 因子个数的最大值
if(cnt>ans)
{
ans=cnt;
max=i;
}
}
return max;//返回 这个满足因子个数 最多的数。
}
//---------------------手动分界线-------------------------------
//求素数 函数---暴力
void isprime(int n)
{
for(int i=2;i*i<=n;i++)
{
int j=0;
for(j=2;j<i;j++)
{
if(i%j==0) break;
}
if(j==i) printf("%d ",i);
else continue;
}
}
6-4 范围水仙花数
//考察 水仙花数
int cn(int n,int m)
{
int s,k=0;
int book[1000];
for(int i=n;i<=m;i++)
{
int j=i,s=0;
while(j)
{
s+=(j%10)*(j%10)*(j%10);
j/=10;
}
if(i==s) book[k++]=i;
}
if(k)
{
printf("%d",book[0]);
for(int i=1;i<k;i++) printf(" %d",book[i]);
return 1;
}
else return 0;
}
6-5 公约数和公倍数
/*
题目意思:求出来 公约数 + 公倍数
*/
//方法:辗转相除法---课本 P148 例 4-21
long long cn(long long a,long long b)
{
long long r,t;
while(r=a%b)
a=b,b=r;
return b;
}
//-----------------------手动分割线----------------------
/*
知识总结:二种方法求解此类问题
*/
//递归实现
int gcd(int a,int b)//计算最大公约数---递归法
{
if (b==0)
return a;
int r = a%b;
return gcd(b,r); //当然这一种可以写成 逗号表达式的 形式。
}
//辗转相除实现
int gcd(int a,int b) //计算最大公约数---辗转相除法
{
int t;
while(b > 0)
{
t = a % b;
a = b;
b = t;
}
return a;
}
6-6 进制转换
/*
题目大意:对于一个数字n 进行 转换成 r进制数
*/
int cn(int n,int r)
{
int k=0;
if(r>=1&&r<10)
{
while(n)
{
s[k++]=n%r+48;//int类型-->char类型 需要 +’0‘ 或者 +48
n/=r;
}
}
else
{
while(n)
{
int j=n%r;
n/=r;
if(j>9) s[k++]=j+55; //对于大于9的 就要 从十开始 变成 字母了
//然后 9到16 差了7 所以要在 +48基础上 多+ 7
else s[k++]=j+48;
}
}
return k;
}
6-7 绝对值排序
/*
题目大意:在有 绝对值的前提下 进行从大到小 排序
*/
void cn(int a[],int n)
{
//输入
for(int i=0;i<n;i++) scanf("%d",&a[i]);
//冒泡排序+abs函数的使用
for(int i=0;i<n-1;++i)
{
int j=0;
for(j=0;j<n-1-i;++j)
{
if(abs(a[j])<abs(a[j+1]))
{
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
//输出
for(int i=0;i<n;i++)
{
if(i!=n-1)
printf("%d ",a[i]);
else printf("%d",a[i]);
}
}
6-8 连接字符串
/*
题目大意:将 两个字符串 进行链接
*/
void cn(char s[],char b[])
{
int i=0,j=0;
while(s[i]) i++;//先把 s数组本身的字符 走到末尾
while(b[j]) s[i++]=b[j++]; //加入新的字符
//下面这个 ’\0‘ 一定要重视 printf函数以 %s 打印是以 \0 进行停止的
s[i]='\0';
}
6-9 求次方
/*
题目大意:求一个数字n的m次方
*/
long long cn(long long x,long long y)
{
long long sum=1;
//暴力叠乘
for(int i=1;i<=y;++i)
{
sum*=x;
}
return sum;
}
6-10 求阶乘
/*
题目大意:用递归的方法求整数x的阶乘。
*/
//暴力方法
long long cn(int x)
{
long long sum=1;
for(int i=1;i<=x;++i)
{
sum*=i;
}
return sum;
}
//递归方法
long long cn(int x)
{
if(x<=1)
return 1;
return x*cn(x-1);
}
6-11 求母牛数
//思维题一道
void cn(int a[])
{
//类似于斐波那契,但是要找规律
a[1]=1,a[2]=2,a[3]=3;
for(int i=4;i<55;++i)
{
a[i]=a[i-3]+a[i-1];
}
}
6-12 求素数
//暴力 求素数
int cn(long long x)
{
if(x==1) return 0;
for(int i=2;i*i<=x;i++)
if(x%i==0) return 0;
return 1;
}
6-13 求最大值
//暴力求最大值
int cn(int a[],int n)
{
int mx=a[0],i;
for(i=1;i<n;i++)
mx=a[i]>mx?a[i]:mx;
return mx;
}
//递归求最大值
int cn(int a[],int n)
{
int m;
if(n<=1) return a[0];//结束递归条件
else
{
m=cn(a,n-1);//继续递归
return a[n-1]>=m?a[n-1]:m;//返回最大值
}
}
6-14 数字求和
//暴力求解数字和
void cn(int n,int ans)
{
while(n)
ans += n %10,n/=10;
printf("%d\n",ans);
}
//递归求解数字和
void cn(int n,int ans)
{
if(n<10)
{
ans+=n;
printf("%d\n",ans);
}
else
{
ans+=(n%10);
cn(n/10,ans);
}
}
6-15 数字转换
//其实就是对 偶数 和 奇数的 不同操作
void cn(long long x)
{
while(x!=1)
{
printf("%lld ",x);
if(x%2) x=x*3+1;
else x/=2;
}
printf("%lld ",x);
}
6-16 巫妖王的愤怒
void cn(int n)
{
int mn;
//% 之后余下的越多 就说明不行 所以就换一种商品购买
if(n<300) mn=n%150>n%200?n%200:n%150;
else mn=n%50;
printf("%d\n",mn);
return 0;
}
6-17 字符串逆序
void cn(char s[])
{
int left=0,right=strlen(s)-1;
while(left<right)
{
char tmp=s[left];
s[left]=s[right];
s[right]=tmp;
right--;
left++;
}
return;
}
6-18 字母统计
void cn(char s[])
{
for(int i=0;s[i];++i)
{
if(s[i]>='A'&&s[i]<='Z')
{
num1++;
}
else if(s[i]>='a'&&s[i]<='z')
{
num2++;
}
}
}
结语
我是夏目浅石,希望和你一起学习进步,刷题无数!!!希望各位大佬能一键三连支持一下博主,hhhh~我们下期见喽
如果无聊的话,就来逛逛我的博客栈吧stack-frame.cn
✨ 原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力! \textcolor{9c81c1}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向! \textcolor{ed7976}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富! \textcolor{98c091}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!