大家看下c语言这俩题急

第一题
蒜头君想当蒜国的总统,蒜国大选是按各州的投票结果来确定最终的结果的,如果得到超过一半的州的支持就可以当选,而每个州的投票结果又是由该州选民投票产生的,如果某个州超过一半的选民支持蒜头君,则他将赢得该州的支持.现在给出每个州的选民人数,请问蒜头君至少需要赢得多少选民的支持才能当选?

输入格式
输入包含多组测试数据.

每组数据的第一行是一个整数N(1小于等于N小于等于101)N(1≤N≤101)、表示蒜国的州数,当N=0时表示输入结束.

接下来一行包括N个正整数,分别表示每个州的选民数,每个州的选民数不超过100

输出格式
对于每组数据输出一行,表示蒜头君至少需要赢得支持的选民数.

样本输入
3
5 7 5
0
样本输出
6

第二题
蒜头君喜欢图形,而且喜欢把图形倒过来欣赏。有一次,他看见杨辉三角形,觉得很新鲜。杨辉三角是如下三角形。可以发现杨辉三角的每个位置的值是左上角的值加上右上角的值。现在蒜头君选择前面 n行,然后把图形倒过来。但是蒜头君是手工画的,你却可以用编程更快捷地做出来,多爽啊!输入格式输入一行一个整数 n(1≤n≤5),表示选择的行数。输出格式输出 n行倒的杨辉三角(每一行相邻的数之间用一个空格隔开)。Sample Input4Sample Output1 3 3 1 1 2 1 1 1 1

第一题

#include <stdio.h>

int main(void)
{
    int a[200], n;
    scanf("%d", &n);
    while (n)
    {
        for (int i = 0; i < n; i++)
            scanf("%d", &a[i]);

        // 冒泡排序
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j + 1 < n - i; j++)
            {
                if (a[j] > a[j + 1])
                {
                    int t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
            }
        }

        int ans = 0;
        for (int i = 0; i < (n + 2) / 2; i++)
            ans += (a[i] + 2) / 2;

        printf("%d\n", ans);
        scanf("%d", &n);
    }
    
    return 0;
}

第二题

#include <stdio.h>

int a[50][50];

int main(void)
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (i == j || j == 0)
                a[i][j] = 1;
            else
                a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < i; j++)
            printf(" ");
        for (int k = 0; k < n - i; k++)
        {
            printf("%d", a[n - i - 1][k]);
            printf(" ");
        }
        if (i != n - 1)
            puts("");
    }
    return 0;
}

望采纳!