XDOJ—3,27,70,73—最小差值,阶梯电价计费,Z字形扫描,字符串压缩

XDOJ—3,27,70,73—最小差值,阶梯电价计费,Z字形扫描,字符串压缩

2019.12.29日

最小差值

问题描述
  给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。
输入格式
  输入第一行包含一个整数n。
  第二行包含n个正整数,相邻整数之间使用一个空格分隔。
输出格式
  输出一个整数,表示答案。
样例输入
5
1 5 4 8 20
样例输出
1
样例说明
  相差最小的两个数是5和4,它们之间的差值是1。
样例输入
5
9 3 6 1 3
样例输出
0
样例说明
  有两个相同的数3,它们之间的差值是0.
数据规模和约定
对于所有评测用例,2 ≤ n ≤ 1000,每个给定的整数都是不超过10000的正整数。

#include<stdio.h>
#include<math.h>
int abs(int a,int b)
{
	int c;
	if(a>b)
		c=a-b;
	else
		c=b-a;
	return c;
}
int main()
{
	int n,i,j,b=10000;
	int a[100];
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
	{
		if((abs(a[i],a[j]))<b&&(i!=j))
			{
				b=abs(a[i],a[j]);
			}
	}	
	printf("%d",b);
	return 0;
}

阶梯电价计费

类别:流程控制
时间限制:2S
内存限制:10000Kb
问题描述:
电价分三个档次,[0,110]度电,每度电0.5元;(110,210]度电,超出110部分每度电0.55元,超过210度电,超出210部分每度电0.70元,给出一个家庭一月用电量,请计算出应缴的电费(四舍五入,保留小数点后两位小数)。
输入说明:
输入数据为一个正实数,表示一月用电量
输出说明:
输出应缴电费,四舍五入保留2位小数。
输入样例:
输入样例1
100
输入样例2
200
输入样例3
329.75
输出样例:
输出样例1
50.00
输出样例2
104.50
输出样例3
193.82

#include<stdio.h>
int main()
{
	double a;
	double b;
	scanf("%lf",&a);
	if(a<=110)
		b=a*0.5;
	else if(a<=210)
		b=110*0.5+(a-110)*0.55;
	else
		b=110*0.5+100*0.55+(a-210)*0.7;
	printf("%.2f",b);
}

Z字形扫描

类别
数组

时间限制
1S

内存限制
256Kb

问题描述
在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个m×n的矩阵,Z字形扫描的过程如下图所示。

对于下面给出的4×4的矩阵:
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3
对其进行Z字形扫描后得到长度为16的序列如下所示:
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。

输入说明
数据的第一行为整数n(n<100),表示矩阵的行和列数;接下来的n行数据,每行分别为n个整数值(每个整数值都不超过1000),即矩阵的值

输出说明
在一行上输出Z字形扫描得到的整数序列,整数之间用空格分隔

输入样例
4
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3
输出样例
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
没写出来,查找:

#include<stdio.h>
#include<stdlib.h>
#define RIGHT 1
#define DOWN 2
#define LEFTDOWN 3
#define RIGHTUP 4

int main()
{
    int row,col;
    int n=0;
    int **array;
    scanf("%d",&n);
    if(n<1 || n>500)
    {
        return 0;
    }
    array=(int**)malloc(sizeof(int*)*(n+1));
    int i;
    for(i=1;i<=n;i++)
    {
        array[i]=(int*)malloc(sizeof(int)*(n+1));
    }
    for(row=1;row<=n;row++)
    {
        for(col=1;col<=n;col++)
        {
            scanf("%d",&array[row][col]);
            if(array[row][col]<0 || array[row][col]>1000)
            {
                return 0;
            }
        }
    }
    row=1;
    col=1;
    int direction=0;
    int *resultArray;
    resultArray=(int*)malloc(sizeof(int)*n*n);
    int a;
    resultArray[0]=array[row][col];
    for(a=1;a<n*n && !(row==n && col==n);a++)
    {
        if(direction==0)
        {
            direction=RIGHT;
        }
        else if(direction==RIGHT)
        {
            if(row+1<=n && col-1>=1)
            {
                direction=LEFTDOWN;
            }
            else
            {
                direction=RIGHTUP;
            }
        }
        else if(direction==LEFTDOWN)
        {
            if(row+1<=n && col-1>=1)
            {
                direction=LEFTDOWN;
            }
            else if(row+1<=n)
            {
                direction=DOWN;
            }
            else
            {
                direction=RIGHT;
            }
        }
        else if(direction==RIGHTUP)
        {
            if(row-1>=1 && col+1<=n)
            {
                direction=RIGHTUP;
            }
            else if(col+1<=n)
            {
                direction=RIGHT;
            }
            else
            {
                direction=DOWN;
            }
        }
        else
        {
            if(row+1<=n && col-1>=1)
            {
                direction=LEFTDOWN;
            }
            else
            {
                direction=RIGHTUP;
            }
        }

        if(direction==RIGHT)
        {
            ++col;
        }
        else if(direction==DOWN)
        {
            ++row;
        }
        else if(direction==LEFTDOWN)
        {
            ++row;
            --col;
        }
        else
        {
            --row;
            ++col;
        }
        resultArray[a]=array[row][col];

    }
    for(a=0;a<n*n;a++)
    {
        printf("%d ",resultArray[a]);
    }
    free(resultArray);
    int j;
    for(j=1;j<=n;j++)
    {
        free(array[j]);
    }
    free(array);
    return 0;
}

字符串压缩

类别
字符串处理

时间限制
1S

内存限制
1000Kb

问题描述
有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
例如,字符串aaaaabbbabaaaaaaaaaaaaabbbb可压缩为a5b3aba13b4。
请设计一个程序,将采用该压缩方法得到的字符串解压缩,还原出原字符串并输出。

输入说明
输入数据为一个字符串(长度不大于50,只包含字母和数字),表示压缩后的字符串

输出说明
在一行上输出解压缩后的英文字符串(长度不超过100),最后换行。

输入样例
a5b3aba13b4

输出样例
aaaaabbbabaaaaaaaaaaaaabbbb
没写出来,查找:

#include<stdio.h>
int main() 
{ 
	char str[256],str1[256]; 
	int i,j,k,n;
	gets(str); 
	i=j=0;
	while ( str[i] ) 
	{
    	str1[j]=str[i]; 
		j++; 
		i++; 
		n=0;
    	while(str[i]>='0'&&str[i]<='9') 
		{ 
			n*=10; 
			n+=str[i]-'0'; 
			i++; 
		}
    for(k=0;k<n-1;k++)
		str1[j+k]=str1[j-1];
    if(n>0)
		j+=n-1;
  	}
	str1[j]=0;
  	printf("%s\n",str1);
}
发布了47 篇原创文章 · 获赞 2 · 访问量 1336

猜你喜欢

转载自blog.csdn.net/qq_45550139/article/details/103746924
今日推荐