数据结构:C++

【问题描述】编写一个程序,判断一个字符串是否为回文(顺读和倒读都一样的字符串称为回文)。
 

【输入形式】以#结尾的任意字符串
【输出形式】如果是回文,输出字符串的长度(不包括结尾的#),否则打印no
【样例输入】abcdcba#
【样例输出】7

#include<iostream>
#include<string>

using namespace std;


void  h(string d)
	{
		string c,g;
		c=d;
		int len=d.size()-1;
		bool f=false;
		for(int i=0;i<len;i++)
		{
		
			if(c[i]!=c[len-1-i]){
				f=true;
			}
		}

		if(f)
			std::cout<<"no"<<std::endl;	
		else
			std::cout<<len<<std::endl;
	}

int main()
{
	 string a;
	 cin>>a;
	 h(a);
	
}

【问题描述】编写一个程序,判断一个字符串是否为回文(顺读和倒读都一样的字符串称为回文)。
【输入形式】长度小于100的任意字符串
【输出形式】yes或no
【样例输入】abcdcba
【样例输出】yes

#include<iostream>
#include<string>

using namespace std;


void  h(string d)
	{
		string c,g;
		c=d;
		
		int len=d.size();
		

		bool f=false;
		for(int i=0;i<len;i++)
		{
		
			if(c[i]!=c[len-1-i]){
				f=true;
			}
		}

		if(f)
			std::cout<<"no"<<std::endl;	
		else
			std::cout<<"yes"<<std::endl;
	}

int main()
{
	 string a;
	
	 
	 bool o=true;
	 while(o)
	 {
		  cin>>a;
		 int l=a.size();
	 if(l>=100)cin>>a;
	 else o=false;
	 }
	 h(a);
	
}

【问题描述】编写一个函数,作用是把一个char组成的字符串循环右移n位。例如:原来是“ abcdefghi”,如果n=2,移位后应该是“ hiabcdefg”。(此题为一面试题)【输入形式】键盘输入任意的一个字符串
【输出形式】移位后的字符串


【样例输入】abcdefghi

                    2  

【样例输出】

                     hiabcdefg【样例说明】
【评分标准】 

#include<iostream>
#include<string>

using namespace std;


void  recursive(string d,int l)
{
    size_t length=d.size();
    string nstring=d;
    int j=l-1;
    for(size_t i=length-1;i>length-l-1;i--)
    {
        nstring[j]=d[i];
        j--;
       
    }
    for(int i=0;i<length;i++)
    {
        nstring[i+l]=d[i];
        
    }
    
    std::cout<<nstring<<std::endl;
}


int main()
{
     string a;
    cin>>a;
    cin.get();
    int len;
    cin>>len;
    recursive(a,len);
}

【问题描述】依次输入一个整形数组的元素值,然后求该数组前n个元素的最小值及其下标。例如,数组前5个元素为{12,23,8,76,10},该数组的最小值是8,下标是2。

提示:

(1)定义一个数组,数组大小不超过999,为该数组赋值。

(2)在循环中通过比较得到数组的最小值,并把最小值的下标保存下来。

【输入形式】第一行输入数组的前n个元素个数,第二行输入依次输入元素值,用空格分开

【输出形式】第一行数组元素的最小值,第二行最小值元素的下标

【样例输入】

5

12#23#8#76#10

(#表示空格)

【输出形式】

8

2

【样例说明】输入的第一行是参与运算的数组的元素个数n,第二行依次为数组元素的值;输出第一行为数组的最小值,第二行为最小值元素下标。

#include  <stdio.h> 
#include  <string.h> 
void min(int *a,int l)
{
    int i,min1=a[0],index=0;

    for ( i = 1; i < l; i++)
    {
            if(a[i]<min1)
            {
                min1=a[i];
                index=i;
            }
            
        }

        printf("%d\n%d",min1,index);
  
    

    
}
int main()
{
    int a[999];
    int n,i=0,d;
    scanf("%d",&n);
    while (i<n)
    {
        scanf("%d",&d);
        a[i++]=d;
    }
   min(a,n);
    return 0;
}

【问题描述】

编写一个程序,用户输入若干整数,试找出其中的最大数和最小数。
【输入形式】

用户在第一行待输入数据个数,在第二行输入数据。
【输出形式】

程序在下一行输出数据的最大值和最小值

#include  <stdio.h> 
#include  <string.h> 
int main()
{
    int a[999];
    int n,i=0,d;
    scanf("%d",&n);
    while (i<n)
    {
        scanf("%d",&d);
        a[i++]=d;
    }

    int min1=a[0],max=a[0];

    for ( i = 1; i < n; i++)
    {
            if(a[i]<min1)
            {
                min1=a[i];
                
            }
             if(a[i]>max)
            {
                max=a[i];
                
            }
            
        }

    printf("%d %d",max,min1);




    return 0;
}

【问题描述】求指定区间[A,B]之间的素数和。比如求100-300之间的素数和,其中,区间的上下界由用户输入,最后输出区间的素数和。

【输入形式】10 30        

【输出形式】10-30之间的素数和是112
【样例输入】10 30
【样例输出】10-30之间的素数和是112

【样例说明】输入的A和B以空格分开
【评分标准】

#include  <stdio.h> 
#include  <string.h> 
void Prime(int a,int b)
{
    b=b+1;
    int i,j,sum=0,flag=1;
    for ( i = a; i < b; i++)
    {
        flag=1;
        for ( j = 2; j < i/2+1; j++)
        {
            if(i%j==0)
            {
                flag=0;
                break;
            }
        }
        if(flag)
        {
            sum+=i;
        }
    }
    printf("*%d-%d?*%d ",a,b-1,sum);
}
int main()
{
    int A,B;
    scanf("%d%d",&A,&B);
    Prime(A,B);
    return 0;
}

【问题描述】

给出一个不多于5位的正整数,要求:
1.求出它是几位数。
2.分别打印出每一位数字。
3.按照逆序打印出每一位数字。
【输入形式】

控制台输入该正整数。
【输出形式】

控制台分行输出输出结果。

#include  <stdio.h> 
#include  <string.h> 
 
int main()
{
    int n,a[5];
    scanf("%d",&n);
    int k=0,i,j=0;
    while (n!=0)
    {
        k++;
        a[j++]=n%10;
        n=n/10;
    }
    printf("%d\n",k);


   for ( i = k; i >0; i--)
   {
        printf("%d",a[i-1]);
   }
      printf("\n");
   for ( i = 0; i < k; i++)
   {
        printf("%d",a[i]);
   }
   
    

    return 0;
}

【问题描述】

编写一个程序,将两个元素从小到大有序的一维数组归并成一个有序的一维数组。
【输入形式】

用户在第一行输入第一个有序数组的元素数目,以回车结束此输入。然后在第二行按照刚才输入的元素数目依次输入数组元素,中间用空格分隔,最后用回车结束输入。第三行和第四行只需重复刚才的步骤,将第二个有序数组也输入即可。输入时候一定是有序输入的,即数组元素已经按照从小到大顺序排列。
【输出形式】

程序将两个有序一维数组合并为一个有序数组并按照从小到大顺序输出。每个元素输出时用空格分隔,最后一个输出之后没有空格。

#include  <stdio.h> 
#include  <string.h> 
int main()
{
    int a[100],b[100],c[200];
    int n,m,k=0,d,e=0;
    scanf("%d",&n);
    while (k<n)
    {
         scanf("%d",&d);
         a[k++]=d;
         c[e++]=d;
    }
    k=0;
    scanf("%d",&m);
    while (k<m)
    {
         scanf("%d",&d);
         b[k++]=d;
         c[e++]=d;
    }
    int i,j,t,l=m+n;
//选择排序
    for ( i = 0; i < l; i++)
    {
       for ( j = 0; j < l; j++)
       {
        if (c[i]<c[j])
            {
                t=c[i];
                c[i]=c[j];
                c[j]=t;
            }
       }
    }
    for ( i = 0; i < m+n; i++)
    {
        printf("%d ",c[i]);
    }
    
    
    return 0;
}

问题描述】输入 10 个数,按绝对值从大到小排序后输出。(要求用指针做)

【输入形式】输入10个float实数
【输出形式】以小数点后两位有效数字输出从大到小数列!

【样例输入】11.3 -24.1 31.6 -41 57.6 -68.1 72.5 -89.7 96.8 -100.3
【样例输出】

-100.30,96.80,-89.70,75.50,-68.10,57.60,-41.00,31.60,-24.10,11.30

#include  <stdio.h> 
#include  <string.h> 
void sort(float *q)
{
    int i,j;
    float d,e,t;
    for ( i = 0; i < 10; i++)
    {
        d=q[i];
        for ( j = i+1; j < 10; j++)
        {
            e=q[j];
            if(q[i]<0)
        {
            d=-q[i];
        }if(q[j]<0)
        {
            e=-q[j];
        }
        if(d<e)
            {
                t=q[i];
                q[i]=q[j];
                q[j]=t;
            }
            
        }
    }
    for ( i = 0; i < 9; i++)
    {
        printf("%.2f,",q[i]);
    }
    printf("%.2f",q[9]);
    
}
int main()
{
    float a[10];
    int i=0;
    for ( i = 0; i < 10; i++)
    {
        scanf("%f",&a[i]);
    }
    sort(a);
    return 0;
}

【问题描述】
回文是正读和倒读都一样的句子。读入一个最大长度不超过50个字符的句子,判断其是否是回文。
【输入形式】
输入一个最大长度不超过50个字符的句子
【输出形式】
Yes/No

#include  <stdio.h> 
#include  <string.h> 
void isHW(char *p)
{
    int i,l,flag=1,d;
    l=strlen(p);
    d=l-1;
//abccba
    for ( i = 0; i <l/2 ; i++)
    {
        if(p[i]!=p[d])
        {
            flag=0;
        }
        d--;
    }
   
    flag&&printf("Yes");//这里我用了短路运算,挺有意思的
    flag||printf("No");
    
}
int main()
{
    char a[50];
    scanf("%s",a);
    isHW(a);
 
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值