大数据2班13周堂测题解

1.十进制数转二进制数
很常规的一个题,取余存进数组然后输出就好了。除二反序取余法(十进制转二进制)的判断条件是商不为0,那么只要商为零,就是循环结束的标志。

#include "stdio.h" 
void binary(int n)
{
    int ans1, ans2;
    long long a[50000];
    ans1=n/2;
    ans2=n%2;
    a[0]=ans2;
    n=ans1;
    int i=1;
    while(ans1)
    {
        ans1=n/2;
        ans2=n%2;
        a[i++]=ans2;
        n=ans1;
    }
    int j;
    for(j=i-1;j>=0;j--)
    printf("%lld",a[j]);
    printf("\n");
}
 

int main() 
{ 
    int n; 
    scanf("%d", &n); 
    binary(n); 
    return 0;
}

2. 求函数值
讲过写过的,这里直接上代码了

#include "stdio.h"

int g(int x)
{
    if(x<2)  return x;
    if(x>=2&&x%2==0)  return (g(x/2)+1);
    if(x%2!=0)  return x;
}

int f(int x)
{
    if(x<2)  return x;
    if(x>=2&&x%2==0)  return g(x/2)*2 ;
    if(x>=2&&x%2!=0)  return g((x-1)/2);
}

int  main()
{
    int n;
    scanf("%d",&n);
    printf("%d",f(n));
    return 0;

}

3. 二进制加法
上次考过的,不多讲了

#include "stdio.h"
#include "string.h"
main()
{   int a[100]={0},b[100]={0},c[100]={0};
    char s[101];
    int i=0,n1=0,n2=0,max=0,e=0;
    gets(s);
    n1=strlen(s);
    for(i=n1-1;i>=0;i--) a[n1-1-i]=s[i]-'0';
    gets(s);
    n2=strlen(s);
    for(i=n2-1;i>=0;i--) b[n2-1-i]=s[i]-'0';
    if(n1>n2) max=n1;
    else max=n2;
    for(i=0;i<=max;i++)
    {    c[i]=(a[i]+b[i]+e)%2;
         e=(a[i]+b[i]+e)/2;
    }
	if(c[max]>0) printf("%d",c[max]);
    for(i=max-1;i>=0;i--)
    printf("%d",c[i]);
}

4 [填空]函数实现求字符串长度
常规题,循环判断,循环条件即为是否当前字符为’\0’, 每次循环count++即可。

int f(char *s)
 {
     int i=0;
     while(*s!='\0')
     {
         i++;
         s++;
     }
     return i;
 }
 int main() 
{ 
    char s[80]; 
    int i; 
    scanf("%s", s); 
    i=f(s); 
    printf("%d", i); 
}

5 计算组合数
旧题,注意g函数在f函数之前就好了
上代码

#include <stdio.h>

int jie(int n)
{
    int ans=1;
    int i;
    for(i=1;i<=n;i++)
    ans*=i;
    return ans;
}
int zuhe(int n1, int n2)
{
    int ans=jie(n1)/(jie(n1-n2)*jie(n2));
    return ans;
}


int main()
{
    int a, b;
    scanf("%d%d",&a,&b);
    //int ans=zuhe(a,b);
    printf("%d\n",zuhe(a,b));

}

6 因子和
em。。。又是写过的题,这次应该会了吧。
两重循环
外层遍历一万以内的数
内层对每一个数求因子和

#include <stdio.h>

int main()
{
    int n;
    scanf("%d",&n);
    int i, j;
    for(i=1;i<=10000;i++)
    {
        int sum=0;
        for(j=1;j<i;j++)
        {
            if(i%j==0)
            sum+=j;
        }
        if(sum==n)
        printf("%d\n",i);
    }
    return 0;

}

这些题都是oj高程里的题或者是考过的题,今天的题如果没有全过的话要下去好好复习一下。

发布了33 篇原创文章 · 获赞 23 · 访问量 1838

猜你喜欢

转载自blog.csdn.net/qq_45492531/article/details/103280024