首页 > 其他 > 详细

QJ系列笔记

时间:2015-03-27 19:38:15      阅读:107      评论:0      收藏:0      [点我收藏+]

1.求int型数据在内存中存储时1的个数
输入一个int型数据,计算出该int型数据在内存中存储时1的个数。

#include<stdio.h>
void main()
{
    int in,cnt=0;
    int yu,mo;
    scanf("%d",&in);
    for(yu=in/2,mo=in%2;yu!=0;in=yu,yu=in/2,mo=in%2)
    {
        cnt=cnt+mo;
    }
    cnt=cnt+mo;
    printf("%d",cnt);
}

2.句子逆序
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

#include<stdio.h>
void main()
{
    int loop;
    char ch[100];
    gets(ch);

    for(loop=99;loop>=0;loop--)
    {
        if((ch[loop]>=A&&ch[loop]<=z)||ch[loop]== )
            printf("%c",ch[loop]);
    }
}

3.字符串反转
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。

#include<stdio.h>
void main()
{
    int loop,max=0;
    char ch[100];
    gets(ch);
    max=strlen(ch);
    for(loop=max-1;loop>=0;loop--)
    {
            printf("%c",ch[loop]);
    }
}

4.数字颠倒
描述:

输入一个整数,将这个整数以字符串的形式逆序输出

程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

#include<stdio.h>
void main()
{
    int loop,max=0;
    char ch[100];
    gets(ch);
    max=strlen(ch);
    for(loop=max-1;loop>=0;loop--)
    {
            printf("%c",ch[loop]);
    }
}

5.字符个数统计 
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。

#include<stdio.h>
void main()
{
int loop,max=0;
int cnt=0;
char ch[100];
gets(ch);
max=strlen(ch);
for(loop=max-1;loop>=0;loop--)
if(ch[loop]>=0 &&ch[loop]<=127)
cnt=cnt+1;
printf("%d",cnt);
}

 6.提取不重复的整数 
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

#include<stdio.h>
void main()
{
    char ch[100];
    char ch2[10];
    int max;
    int loop;
    int flag=0;
    gets(ch);
    max=strlen(ch);
    for(loop=max-1;loop>=0;loop--)
    {
        if(ch2[ch[loop]]!=1)
        {
                ch2[ch[loop]]=1;
                if(flag==0&&ch[loop]!=0)flag=1;
                if(flag==1)
                    printf("%c",ch[loop]);
        }
    }

}

7.合并表记录
数据表记录包含表索引和数值。请对表索引相同的记录进行合并,合并后表记录为相同索引表的数值求和

#include<stdio.h>
void main()
{
    int num,loop,pos,tmp;
    int a[100]={0};
    int b[100]={0};
    scanf("%d",&num);
    for(loop=0;loop<num;loop++)
    {
        scanf("%d",&pos);
        scanf("%d",&tmp);
        a[pos]=a[pos]+tmp;
        b[pos]=1;
    }
    for(loop=0;loop<99;loop++)
    {
        if(b[loop]==1)
        {
            printf("%d\n",loop);
            printf("%d\n",a[loop]);
        }
    }
}

8.取近似值 
写出一个程序,接受一个浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

#include<stdio.h>
void main()
{
    float in;
    int cnt=0;
    scanf("%f",&in);
    for(;in>1.0;in=in-1)cnt=cnt+1;
    if(in>=0.5)cnt=cnt+1;
    printf("%d",cnt);
}

9.质数因子 
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )

#include<stdio.h>
int check(int in)
{
int loop;
if(in==2) return 1;
for(loop=2;loop<in;loop++)
{
if(in%loop==0)return 0;
else
if(in%loop!=0&&loop==in-1)
{
return 1;
}
}

}
void process(int in)
{
int i,reslut=0;
reslut=check(in);
if(reslut==1)printf("%d",in);
else
for(i=2;i<in;i++)
{
reslut=check(i);
if(reslut==1)
{
if(in%i==0)
{
printf("%d ",i);
process(in/i);
break;
}
}
}
}
void main()
{
int in;
scanf("%d",&in);
process(in);

}

 10.进制转换
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串

#include<stdio.h>
int change(char ch)
{
    int a;
    switch(ch){
    case A:
    case a:
        a=10;
        break;
    case B:
    case b:
        a=11;
        break;
    case C:
    case c:
        a=12;
        break;
    case D:
    case d:
        a=13;
        break;
    case E:
    case e:
        a=14;
        break;
    case F:
    case f:
        a=15;
        break;
    case 9:
        a=9;
        break;
    case 8:
        a=8;
        break;
    case 7:
        a=7;
        break;
    case 6:
        a=6;
        break;
    case 5:
        a=5;
        break;
    case 4:
        a=4;
        break;
    case 3:
        a=3;
        break;
    case 2:
        a=2;
        break;
    case 1:
        a=1;
        break;
    case 0:
        a=0;
        break;
    default:
        a=0;
        printf("error input");

    }
    return a;
}

void main()
{
    char ch[100];
    int len,i,sum=0,tmp;
    gets(ch);
    len=strlen(ch);
    for(i=2;i<len;i++)
    {
        tmp=change(ch[i]);
        sum=sum*16+tmp;
    }
    printf("%d",sum);
}

11.字符串分隔 
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

 

#include<stdio.h>
process(char ch[],int len)
{
    int j;
    int loop,cnt=0;
    j=len%8;
    for(loop=0;loop<len;loop++)
    {
        if(loop%8==0&&loop>0)
        {
            cnt=cnt+1;
            printf("\n");
        }
        printf("%c",ch[loop]);
    }
    if(j>0)
    {
        for(loop=0;loop<8-j;loop++)
        {
            printf("0");
        }
    printf("\n");
    }
}
void main()
{
    char ch1[100];
    char ch2[100];
    int len1,len2;
    int loop;
    gets(ch1);
    gets(ch2);
    len1=strlen(ch1);
    len2=strlen(ch2);
    process(ch1,len1);
    process(ch2,len2);
}

12.明明的随机数
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

#include<stdio.h>
void main()
{
    int num,i,j,t=0;
    int min;
    int in[1000],tmp[1000],a[1000];
    scanf("%d",&num);
    for(i=0;i<num;i++)
    {
        scanf("%d",&in[i]);
    }

    for(i=0;i<num-1;i++)
    {
        for(j=i+1;j<num;j++)
        {
            if(in[i]==in[j])break;
        }
        
        if(j==(num))
        {
            tmp[t]=in[i];
            t=t+1;
        
        }
    }
    tmp[t]=in[num-1];
    t=t+1;

    for(i=0;i<t-1;i++)
    {
        
        for(j=i+1;j<t;j++)
        {
            if(tmp[i]>tmp[j])
            {
                min=tmp[j];
                tmp[j]=tmp[i];
                tmp[i]=min;
            }
        }
    }

    for(i=0;i<t;i++)
    {
        printf("%d\n",tmp[i]);
    }
    
}

13.计算字符个数
写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写

 

#include<stdio.h>
void main()
{
    char ch[100];
    int i,len,num=0;
    char c;
    gets(ch);
    scanf("%c",&c);
    len=strlen(ch);
    for(i=0;i<len;i++)
    {
        if(ch[i]==c)
        {
            num=num+1;
        }
        else
        if(c>=a&&c<=z)
        {
            if(c-ch[i]==32)
                num++;
        }
        else 
        if(c>=A&&c<=Z)
        {
            if(ch[i]-c==32)
                num++;
        }

    }
    printf("%d",num);
}

14.求最小公倍数
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。

#include<stdio.h>
void main()
{
    int a,b,i,begin;
    scanf("%d",&a);
    scanf("%d",&b);
    if(a>b)begin=a;
    else begin=b;
    for(i=begin;i%a!=0||i%b!=0;i++);
    printf("%d",i);
}

15.求解立方根
•计算一个数字的立方根,不使用库函数

16.字符逆序 
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。 如:输入“I am a student”,输出“tneduts a ma I”。

 

上面有了

17.记负均正
从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值(*任意个输入,注意方法!*)

#include<stdio.h>
void main()
{
int a;
int i=0,num=0,cnt=0,sum=0;
while(scanf("%d",&a)!=EOF)
{
if(a>=0)
{
sum=sum+a;
num=num+1;
}
else cnt++;
i++;
}
printf("%d\n",cnt);
if(sum==0)
printf("0.0");
else
printf("%d",sum/num);

}

18.字符串分割
连续输入字符串(输出次数为N,字符串长度小于100),请按长度为8拆分每个字符串后输出到新的字符串数组,

长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

上面有了

19.字符统计(*ASICC 码表的顺序要记住*)
如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。

 

 20.输入整型数组和排序标识,对其元素按照升序或降序进行排序 
输入整型数组和排序标识,对其元素按照升序或降序进行排序(*未完成*)

#include<stdio.h>
void deseed(char ch[])
{
    int i,j,len,tmp;
    len=strlen(ch);
    for(i=0;i<len-1;i++)
    {
        for(j=i+1;j<len;j++)
        {
            if(ch[i]>ch[j])
            {
                tmp=ch[j];
                ch[j]=ch[i];
                ch[i]=tmp;
            }
        }
    }
    for(i=0;i<len-1;i++)
    {
        printf("a=%d ",ch[i]);
    }
    printf("b=%d",ch[len-1]);
}
void reseed(char ch[])
{
    int i,j,len,tmp;
    len=strlen(ch);
    for(i=0;i<len-1;i++)
    {
        for(j=i+1;j<len;j++)
        {
            if(ch[i]<ch[j])
            {
                tmp=ch[j];
                ch[j]=ch[i];
                ch[i]=tmp;
            }
        }
    }
    for(i=0;i<len-1;i++)
    {
        printf("c=%d ",ch[i]);
    }
    printf("d=%d",ch[len-1]);
}
void main()
{

    char ch[100];
    int flag,num,loop;
    scanf("%d",&num);
    for(loop=0;loop<num;loop++)
    {
        scanf("%c",&ch[loop]);
        printf("ch[loop]=%c",ch[loop]);
    }
    scanf("%d",&flag);
    if(flag=0)
        deseed(ch);
    else
        reseed(ch);
}

 

 

 

QJ系列笔记

原文:http://www.cnblogs.com/rednodel/p/4370942.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!