IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 第一次周练 -> 正文阅读

[数据结构与算法]第一次周练

第一题:

#include<stdio.h>
#include<string.h>
int main()
{
    char str[105];
    char ch;
    int a[150]={0};
    int prime[25]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
    int i,n,x,max,min;
    gets(str);
    n=strlen(str);
    
    
    for(i=0;i<n;i++)
    {
        ch=str[i];
        a[ch]++;
    }
    max=a[97];
    for(i=98;i<123;i++)
    {
        if(max<a[i]) max=a[i];
    }
    min=max;
    for(i=98;i<123;i++)
    {
        if(a[i]==0) continue;
        if(min>a[i]) min=a[i];
    }
    
    
    //printf("max = %d,min = %d",max,min);
    x=max-min;
    for(i=0;i<25;i++)
	{
		if(x==prime[i])
		{
			printf("Lucky Word\n%d",x);
			return 0;  //为什么这里的return 0;换成break;就不可以全对;求大佬解释
		}
	}
	printf("No Answer\n0");
}

第二题:

快速排序算法,这里我提交后只有一个测试点通过

?代码如下,求大佬帮我优化一下

#include<stdio.h> 

int array[1000001];

void quick_sort(int left, int right);

void quick_sort(int left, int right)
{
	int i = left, j = right;
	int temp;	//中间变量元素,作为交换值 
	int pivot;   //基准点元素 

	pivot = array[(left + right) / 2];

	do
	{
		//从左到右找到大于等于基准点的元素 
		while (array[i] < pivot)
		{
			i++;
		}
		//从右到左找到小于等于基准点的元素 
		while (array[j] > pivot)
		{
			j--;
		}
		//如果  i<=j  则互换元素
		if (i <= j)
		{
			temp = array[i];
			array[i] = array[j];
			array[j] = temp;
			i++;
			j--;
		}
		if (left < j)
		{
			quick_sort(left, j);
		}
		if (i < right)
		{
			quick_sort(i, right);
		}
	}while (i <= j);
}


int main()
{
	
	int n, i;

	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%d", &array[i]);
	quick_sort(0, n - 1);

	//printf("排序后的结果是:");
	for (i = 0; i < n; i++)
	{
		printf("%d ", array[i]);
	}

	return 0;

}

第三题:

#include<stdio.h>
#include<math.h>

void wblj(int n);

int main()
{
	int n;
	scanf("%d",&n);
	
	wblj(n);
	
	return 0;
}
void wblj(int n)
{
	int i;
	for(i=15;i>=0;i--)    //题目中最大数值20000,而2^15刚好大于20000
	{
		if(pow(2,i)<=n)
		{
			if(i==1) printf("2");
			else if(i==0) printf("2(0)");
			else
			{
				printf("2(");        //递归
				wblj(i);
				printf(")");
			}
			
			n-=pow(2,i);
			if(n!=0) printf("+");
		}
	}
}

?第四题:

这道题将数字以字符串的形式输入便于解题,使用strcmp函数将数字字符串进行比较,并且需要注意的是假如321?和 32 相比肯定是32在前面,因为32321>32132所以需要将两个相邻的字符串连接起来进行比较需要用到strcat函数?

?
?
#include<stdio.h>
#include<string.h>


int main()
{
	char str[21][100];
	char a[100], str1[200], str2[200];  //a是交换的中间变量
	int n;
	int i, j, k;

	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%s", str[i]);


	for (i = 0; i < n - 1; i++)
	{
		for (j = i + 1; j < n; j++)
		{
			k = i;
			strcpy(str1, str[k]);        //这里其实是比较 a+b 与 b+a 的大小
			strcat(str1, str[j]);

			strcpy(str2, str[j]);
			strcat(str2,str[k]);

			if (strcmp(str1, str2) < 0) k = j;  //选择法排序
			if (k != i)
			{
				strcpy(a, str[k]);
				strcpy(str[k], str[i]);
				strcpy(str[i], a);
			}
		}
	}


	for (i = 0; i < n; i++)
	{
		printf("%s", str[i]);
	}

}

?

?

第五题:

?这道题看了很久才发现规律

第 n 行有 n 个数,并且当 n 为偶数时,分子从第一个数到第 n 个数,分别是1 到 n ,分母则相反,是从 n 到 1 ;

当 n 为奇数时,分子分母的情况与偶数相反,即分母从第一个数到第 n 个数,分别是1 到 n ,分子则相反,是从 n 到 1 ;

#include<stdio.h>
int main()
{
 int n,h=1,k;
 scanf("%d",&n);
 while(n>h)
 {
  n-=h;
  h++;
 }
 k=n-1;        //计算这个数在第h行与该行第一个数相差几个数
 if(h%2==0) printf("%d/%d",k+1,h-k);
 else printf("%d/%d",h-k,k+1);
 return 0;
}

这个while循环是用来判断第n个数在第几行,第一行一个数,第二行两个数,以此下去,所以从一开始让n开始减知道这个数小于该行

第六题:

如果不知道大写字母的ASCII就可以用这个字符直接减去'A'就可以了

#include<stdio.h>
#include<string.h>
int main()
{
	int x=1,y=1;
	int i,j;
	char a[6],b[6];
	scanf("%s",a);
	getchar();
	scanf("%s",b);
	for(i=0;i<strlen(a);i++)
	{
		x*=(a[i]-'A'+1);
	}
	for(j=0;j<strlen(b);j++)
	{
		y*=(b[j]-'A'+1);
	}
	if(x%47==y%47) printf("GO");
	else printf("STAY");
}

?第七题:

?应该先写一个判断质数的函数,每次循环就可以直接调用,然后从4开始循环到n,并且内循环只需要判断第一个加数,第二个用 i 减去,在判断它是否为指数即可。

#include<stdio.h>
#include<math.h>

int zhishu(int n)
{
	int i,q;
	q=(int)sqrt(n);
	if(n==1) return 0;
	for(i=2;i<=q;i++)
	{
		if(n%i==0) return 0;
	}
	return 1;
}

int main()
{
    int n,i,j,t,k;
    scanf("%d",&n);
    for(i=4;i<=n;i+=2)
    {
    	for(j=1;j<=i/2;j++)
    	{
    		t=j;
    		k=i-t;
			if(zhishu(t)&&zhishu(k))
			{
				printf("%d=%d+%d\n",i,t,k);
				break;
			}
		}
			
	}
    return 0;
}

第八题:

#include<stdio.h>
int main()
{
    int a,b,day=0;
    int max=8,i;
    for(i=1;i<=7;i++)
    {
        scanf("%d %d",&a,&b);
        if((a+b)>max)
        {
            max=a+b;
            day=i;
        }
    }
    printf("%d",day);
}

第九题:

?第 n 行数的第一个数和第 n 个数均为 1;即 a[i][0]和a[i][i]为 1 ,其他的 a[i][j]=a[i-1][j-1]+a[i-1][j]。

#include<stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    int i, j;
    int a[20][20];
    for (i = 0; i < n; i++)
    {
        a[i][0] = 1;
        a[i][i] = 1;
        for (j = 1; j < i; j++)
        {
            a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j <= i; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}

第十题:

#include<stdio.h>
int n,t[1001],i,ans;
int main(){
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&ans);
        t[ans]=1;
    }
    ans=0;
    for(i=1;i<=1000;i++)
        if(t[i])
            ans++;
    printf("%d\n",ans);
    for(i=1;i<=1000;i++)
        if(t[i])
            printf("%d ",i);
    return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:35:49  更:2021-11-22 12:36:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:50:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码