共用体练习 (sdut oj)

    xiaoxiao2021-03-25  68

    共用体练习

    Time Limit: 1000MS  Memory Limit: 65536KB

    Problem Description

     给定n和m,接下来有n个描述,每个描述包含一个类型标志和一组相应的数据。类型标志共3种:INT DOUBLE STRING,然后对应一组相应的数据。紧接着有m个询问,每个询问仅包含一个整数x,要求输出第x个描述对应的数据(STRING类型保证不含空格,每组对应STRING数据不会超过19个字符)。

     

    Input

    输入的第一行为两个整数,n和m (n<=100000, m<=100000),分别代表描述的个数和询问的个数。接下来为 n 行描述,最后为m行询问,具体格式见样例输入输出。

    Output

    对于每个询问,输出对应的结果,注意:浮点数保留两位小数。

    Example Input

    5 4 INT 456 DOUBLE 123.56 DOUBLE 0.476 STRING welcomeToC STRING LemonTree 0 1 2 4

    Example Output

    456 123.56 0.48 LemonTree

    Hint

    必须使用共用体完成。

    Author

    参考代码

    #include<stdio.h> #include<string.h> union st { int a; double b; char c[20]; } u[100000]; char s[100000][20]; int main() { int m,n; int i; int x; scanf("%d%d",&n,&m); for( i = 0; i < n; i++ ) { scanf("%s",s[i]); if( s[i][0] == 'I' ) scanf("%d",&u[i].a); if( s[i][0] == 'D' ) scanf("%lf",&u[i].b); if( s[i][0] == 'S' ) scanf("%s",&u[i].c); } for( i = 0; i < m; i++ ) { scanf("%d",&x); if( s[x][0] == 'I' ) printf("%d\n",u[x].a); if( s[x][0] == 'D' ) printf("%.2lf\n",u[x].b); if( s[x][0] == 'S' ) printf("%s\n",u[x].c); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-30437.html

    最新回复(0)