noip1998 拼数-练习类

写的丑死


未AC

搞不懂


//#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;


class LINT
{
    friend ostream& operator<<(ostream& out, LINT& e);
private :
    char num[100];
public  :
    LINT(){num[0]='\0';}
    LINT(char *m){strcpy(num,m);}
    LINT(int a);
    bool operator>(const LINT& m);
    
};
/*
功能:初始化
输入:int a
输出:
日期:
*/
LINT::LINT(int a)
{
    if (a==0) { num[0]='0';num[1]='\0';return;}
    int i=0;
    while (a)
    {
        num[i++] =  a % 10;
        a /= 10;
    }
    num[i]='\0';
    int len = strlen(num);
    for (i=0; i<strlen(num); i++)
    {
        char tmp = num[len-i-1];
        num[len-i-1] = num[i];
        num[i] = tmp;
    }
    return;
}
/*
功能:重载运算符
输入:LINT a,b
输出:a>b 成立 1 否则 0
日期
*/
bool LINT::operator>(const LINT &m)
{
    return strcmp(num, m.num)>0;
}
/*
功能:重载输出运算符
输入:LINT e
输出:
日期:
*/
ostream& operator<<(ostream &out, LINT& e)
{
    out<<e.num;
    return out;
}



class LIST
{
private :
    LINT n[100];
    int len;
public:
    LIST(int n=0){len=n;}
    void Add(LINT e);
    void Sort();
    void Print();
    LINT GetAt(int i){return n[i];}
    int GetLen(){return len;}
};
/*
功能:Add
输入:LINT e
输入:无
日期:
*/
void LIST::Add(LINT e)
{
    n[len++]=e;
}

/*
功能:Sort 从大到小
输入:无
输入:无
日期:
*/
void LIST::Sort()
{
    int i,j;
    for (i=0; i<len; i++)
    {
        for (j=0; j<len-1-i; j++)
        {
            if (n[j+1]>n[j])
            {
                LINT tmp = n[j+1];
                n[j+1] = n[j];
                n[j]=tmp;
            }
        }
    }
}

/*
功能:输出显示
输入:无
输出:无
日期:
*/
void LIST::Print()
{
    for (int i=0; i<len; i++) cout<<"第 "<<i<<" :值:"<<n[i]<<endl;
}

class STRING
{
    friend istream& operator>>(istream &in,STRING& str);
    friend ostream& operator<<(ostream &out,STRING& str);
private :
    char n[1000];
public :
    STRING(){n[0]='\0';}
    STRING* Split(char a);
    int GetLen();
    char * ConvertToCharArray();
};

int STRING::GetLen(){return strlen(n); }
STRING* STRING::Split(char a)
{
    STRING* pStr = new STRING[100];
    int k=0,kp=0;
    int len = strlen(n);
    for (int i=0; i<len; )
    {
        while(n[i]==a && i<len) i++;//找到第一个非空格
        kp=0;
        while (n[i]!=a&&i<len) 
        {
            pStr[k].n[kp++]=n[i++];
        }
        pStr[k++].n[kp]='\0';		
    }
    
    return pStr;
}
istream& operator>>(istream&in ,STRING&str)
{
    gets(str.n);
    return in;
}
ostream& operator<<(ostream&out, STRING&str)
{
    out<<str.n;
    return out;
}
char * STRING::ConvertToCharArray()
{
    char * p = new char [1000];
    strcpy(p,n);
    return p;
}

int main()
{
    LINT a("123") ;
    LINT b("45");
    LINT c("132");

    LIST lst;

    

    int k;
    cin>>k;
    getchar();
    STRING str;
    cin>>str;
    STRING * pStr = str.Split(' ');

    int i=0;
    while ( pStr[i].GetLen() >0)
    {
            char *p = pStr[i].ConvertToCharArray();
            lst.Add(p);
            delete p;
            i++;
    }
    lst.Sort();
    
    for (int i=0; i<lst.GetLen(); i++)
    {
        LINT p = lst.GetAt(i);
        cout<<p;
    }
    cout<<endl;
    

    delete pStr;
    

    //system("pause");
    return 0;
}


实现圆弧进度条的自定义ProgressBar,可以使用Canvas和Paint来绘制。 首先,创建一个自定义的ProgressBar,继承自ProgressBar,并实现构造方法和onDraw方法: ``` public class CircleProgressBar extends ProgressBar { private Paint paint; // 画笔 private int roundColor; // 圆环颜色 private int progressColor; // 进度条颜色 private int textColor; // 文字颜色 private float textSize; // 文字大小 private float roundWidth; // 圆环宽度 private int max; // 最大进度 private boolean textIsDisplayable; // 是否显示进度文字 private int style; // 进度条样式 public static final int STROKE = 0; public static final int FILL = 1; public CircleProgressBar(Context context) { this(context, null); } public CircleProgressBar(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CircleProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // 获取自定义属性的值 TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.CircleProgressBar); roundColor = mTypedArray.getColor(R.styleable.CircleProgressBar_roundColor, Color.RED); progressColor = mTypedArray.getColor(R.styleable.CircleProgressBar_progressColor, Color.GREEN); textColor = mTypedArray.getColor(R.styleable.CircleProgressBar_textColor, Color.GREEN); textSize = mTypedArray.getDimension(R.styleable.CircleProgressBar_textSize, 15); roundWidth = mTypedArray.getDimension(R.styleable.CircleProgressBar_roundWidth, 5); max = mTypedArray.getInteger(R.styleable.CircleProgressBar_max, 100); textIsDisplayable = mTypedArray.getBoolean(R.styleable.CircleProgressBar_textIsDisplayable, true); style = mTypedArray.getInt(R.styleable.CircleProgressBar_style, 0); mTypedArray.recycle(); // 初始化画笔 paint = new Paint(); } @Override protected synchronized void onDraw(Canvas canvas) { super.onDraw(canvas); // 获取圆心坐标和半径 int centerX = getWidth() / 2; int centerY = getHeight() / 2; int radius = (int) (centerX - roundWidth / 2); // 绘制圆环 paint.setColor(roundColor); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(roundWidth); paint.setAntiAlias(true); canvas.drawCircle(centerX, centerY, radius, paint); // 绘制进度条 paint.setStrokeWidth(roundWidth); paint.setColor(progressColor); RectF oval = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius); switch (style) { case STROKE: paint.setStyle(Paint.Style.STROKE); canvas.drawArc(oval, 0, 360 * getProgress() / getMax(), false, paint); break; case FILL: paint.setStyle(Paint.Style.FILL_AND_STROKE); if (getProgress() != 0) canvas.drawArc(oval, 0, 360 * getProgress() / getMax(), true, paint); break; } // 绘制文字 paint.setStrokeWidth(0); paint.setColor(textColor); paint.setTextSize(textSize); paint.setTypeface(Typeface.DEFAULT_BOLD); int percent = (int) (((float) getProgress() / (float) getMax()) * 100); if (textIsDisplayable && percent >= 0) { String text = percent + "%"; float textWidth = paint.measureText(text); canvas.drawText(text, centerX - textWidth / 2, centerY + textSize / 2, paint); } } } ``` 在这个中,我们定义了几个自定义属性,包括圆环颜色、进度条颜色、文字颜色、文字大小、圆环宽度、最大进度、是否显示进度文字、进度条样式等。在构造方法中,我们获取了这些属性的值,并初始化了画笔。在onDraw方法中,我们首先获取了圆心坐标和半径,然后使用画笔绘制了圆环和进度条,最后绘制了进度文字。 接下来,在布局文件中使用这个自定义ProgressBar: ``` <com.example.circleprogressbar.CircleProgressBar android:id="@+id/circle_progressbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" app:roundColor="#cccccc" app:roundWidth="5dp" app:progressColor="#FF4081" app:textColor="#FF4081" app:textSize="20sp" app:textIsDisplayable="true" app:style="STROKE" /> ``` 最后,在Java代码中设置进度值即可: ``` CircleProgressBar circleProgressBar = findViewById(R.id.circle_progressbar); circleProgressBar.setProgress(50); // 设置进度为50% ``` 这样就完成了自定义的圆弧进度条的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值