C语言:第一行输入n,表示有n行,每一行第一个数字输入m,表示该行一共有m个加减符号和数字?

C语言:第一行输入n,表示有n行,每一行第一个数字输入m,表示该行一共有m个加减符号和数字,然后如果每一行计算结果是负数,则超纲,最后先输出一个k,表示有k个超纲,然后输出k个数字,分别是超纲题的题号?

c

2个回答

#include "stdio.h"
#include "stdlib.h"

int main()
{
    int n;
    int k = 0;
    scanf("%d", &n);
    int * r = (int *)malloc(sizeof(int) * n);
    for (int i = 0; i < n; i++)
    {
        int m;
        scanf("%d", &m);
        int sum = 0;
        for (int j = 0; j < m; j++)
        {
            int x;
            scanf("%d", &x);
            sum += x;
        }
        if (sum < 0) { r[i] = 1; k++; } else r[i] = 0;
    }
    printf("%d\n", k);
    for (int i = 0; i < n; i++)
    {
        if (r[i]) printf("%d ", i + 1);
    }
    return 0;
}

图片说明

if (r[i]) printf("%d ", i + 1);这一句是不是应该改为if (r[i]==-1) printf("%d ", i + 1);

dabocaiqq
请你们大家多多姿瓷我菠菜菌 不需要,非0就是true
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言如何表示表示一行内有M个“HDU”相连
Problem Description 做人要有一身正气,杭电学子都应该如此。比如我们今天的考试就应该做到“诚信”为上。 每次考试的第一个题目总是很简单,今天也不例外,本题是要求输出指定大小的"HDU"字符串,特别地,为了体现“正气”二字,我们要求输出的字符串也是正方形的(行数和列数相等)。 Input 输入的第一行包含一个正整数N(N<=20),表示一共有N组数据,接着是N行数据,每行包含一个正整数M(M<=50),表示一行内有M个“HDU”相连。 Output 输出指定大小的方形字符串,输出格式参见样本数据。 Sample Input 2 1 2 Sample Output HDU HDU HDU HDUHDU HDUHDU HDUHDU HDUHDU HDUHDU HDUHDU
请问这个代码输入为什么要输入6行而且代码无效?
题目描述 将两个从小到大排列的一维数组 (维长分别为 m, n , 其中 m,n≤100) 仍按从小到大的排列顺序合并到一个新的一维数组中,输出新的数组. 输入描述 第 1 行一个正整数 m , 表示第一个要合并的一维数组中的元素个数 第 2 行一个正整数 n , 表示第二个要合并的一维数组中的元素个数 第 3 行输入 m 个整数 (每个数用空格分开) , 表示第一个数组元素的值. 第 4 行输入 n个整数 (每个数用空格分开) , 表示第二个数组元素的值. 输出描述 一行,表示合并后的数据,共 m +n 个数 样例输入 3 4 1 3 5 2 4 6 8 样例输出 1 2 3 4 5 6 8 ``` #include<stdio.h> #define N 110 #define M 110 int main () { int m,n,a[M],b[N],c[N+M],i,t,j; { scanf("%d",&m); scanf("%d",&n); for(i=0;i<m;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) scanf("%d",&b[i]); } { for(i=0;i<m+n;i++) scanf("%d",&c[i]); for(j=0;j<m+n-1;j++) for(i=0;i<m+n-j-1;i++) if(c[i]>c[i+1]) { t=c[i]; c[i]=c[i+1]; c[i+1]=t; } for(i=0;i<m+n;i++) printf("%d ",c[i]) ; } return 0; } ```
请问这个代码输入为什么要输入4行而且代码无效?
题目描述 将两个从小到大排列的一维数组 (维长分别为 m, n , 其中 m,n≤100) 仍按从小到大的排列顺序合并到一个新的一维数组中,输出新的数组. 输入描述 第 1 行一个正整数 m , 表示第一个要合并的一维数组中的元素个数 第 2 行一个正整数 n , 表示第二个要合并的一维数组中的元素个数 第 3 行输入 m 个整数 (每个数用空格分开) , 表示第一个数组元素的值. 第 4 行输入 nn个整数 (每个数用空格分开) , 表示第二个数组元素的值. 输出描述 一行,表示合并后的数据,共 m +n 个数 样例输入 3 4 1 3 5 2 4 6 8 样例输出 1 2 3 4 5 6 8 #include<stdio.h> #define N 110 #define M 110 int main () { int m,n,a[M],b[N],c[N+M],i,t,j; { scanf("%d",&m); scanf("%d",&n); for(i=0;i<m;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) scanf("%d",&b[i]); } { for(i=0;i<m+n;i++) scanf("%d",&c[i]); // printf("\n"); for(j=0;j<m+n-1;j++) for(i=0;i<m+n-j-1;i++) if(c[i]>c[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } for(i=0;i<m+n;i++) printf("%d ",c[i]) ; } return 0; }
求循环小数的第n位是什么,我的代码哪里错了?
数学课上,楠楠学习了一个新的知识。 两数相除,如果得不到整数商,会有两种情况:一种是得到有限小数,另一种是得到无限小数。从小数点后某一位开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数,如2.9666..., (在数学中它读作“二点九六,六循环” ), 定义循环小数的缩写法是将第一个循环节以后的数字全部略去,并将第一个循环节首末用括号括起来。 例如: 2.966666... 缩写为 2.9(6) 35.232323…缩写为 35.(23) 楠楠发现,根据循环小数的特征,很快能算出这个循环小数中小数点后第n位的数字,你能吗? 【输入】 共2行。第一行,包含一个整数n(n≤100000),表示求小数点后的第n位。第二行,一个字符串,用缩写法表示的一个循环小数。 【输出】 一行,包含一个整数,表示循环小数中小数点后第n位的数字。 For example: Input Result 10 352.19(7) 7 我的代码是 ``` #include<bits/stdc++.h> using namespace std; int main() { int i=0,j=0,n; cin>>n; char a,b[1000],c[1000]; while(1) { cin>>a; if(a=='.') { break; } } while(1) { cin>>b[i]; if(b[i]=='(') { break; } i++; } while(1) { cin>>c[j]; if(c[j]==')') { break; } j++; } if(n<=i) { cout<<int(b[n-1]-'0')<<endl; } else { if((n-i)%j==0) { cout<<int(c[j-1]-'0')<<endl;; } else { cout<<int(c[(n-i)%j-1]-'0')<<endl; } } return 0; }
找密码(c语言的问题)~~~
在一个古堡的大门上有5行字符。其中隐藏着打开大门的密码。密码共有4位数字(0到9)。小明发现了一种找密码的方法:最后一行中的字符在第一行字符中出现的总次数是密码的第一个数字,依此类推。输入数据保证每行得到的数字在0到9之间。 请编写一个函数 decode帮助小明找出密码。 函数接口定义: int decode(char**s); 通过参数s向函数传递5行字符串,函数返回密码值。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> #define N 100 #define M 5 int decode(char**s); int main() { char *s[M]; int i; int key; for(i=0; i<M; i++){ s[i] = (char *)malloc((N+1)*sizeof(char)); gets(s[i]); } key = decode(s); printf("%04d",key); for(i=0; i<M; i++){ free(s[i]); } return 0; } /* 您提交的代码将放置在这里 */ 输入样例: 1111 222 33 41 2341 输出样例: 4322
用c语言的题目,应该怎么编。
话说,韩信将军神机妙算,兵法娴熟,武艺超群,同时还是一位独具慧眼的将军,能够一眼看出士兵的武艺值 X。一次执行任务,韩信将军到校场点兵,已知校场一共有N位士兵,士兵们的武艺值高低不齐。 随军主簿说一共要选M位士兵,并且要满足所挑选士兵的武艺值 X 依次严格递增。(从第一名士兵开始选,可以选也可以不选,只要满足武艺值递增且人数满足M就算一种方案。) 韩信将军眯了眯眼睛,立即说出了所有可能选择方案数。 数据范围: 1 <= M <= N <= 1000 ,每一个士兵的武艺值 X ( 1 <= X <= 10^9) 输入 第一行输入一个正整数num,代表一共有num组测试数据。( 1 <= num <= 100) 对于每组数据,第一行包含两个整数N和M,N代表士兵总数,M代表挑选的士兵数。 第二行包含N个整数,表示士兵的武艺值X。 输出 每组数据输出一个结果,每个结果占一行。 输出格式为“Answer #a: b”,a为数据组别序号,从1开始,b为结果。 由于数据可能很大,请你输入对 10^9+10 取模后的结果。
C语言 连环锁
Description 许多人一定很熟悉九连环(如下图),九个环被串在一起,操作规则如下:第一个(右边)环可以任意装卸,如果第k个环没有被卸掉,而第k个环前边(右边)的所有环都被卸掉,则第k+1个环(第k个环左边的环)可以任意装卸(如果存在的话)。 用0表示此换被卸掉,1表示此环没有被卸掉,则九连环的每个状态可以用一个长度为9的二进制串来表示,如:111111001经过一次操作可以变成111111000,也可以变成111111011,111111111经过一次操作可以变成111111110,也可以变成111111101。 任务描述: 你现在要操作的是一个n连环,n为正整数,给出n连环的两种状态,计算出从第一种状态变换到第二种状态所需要的最少步数。 Input 第一行是一个正整数m,表示有m组测试数据。 每组测试数据一共3行,第一行是一个正整数n (0 < n < 128),后两行每一行描述一种状态,n个数(0或1),用空格隔开。 Output 对于每一组测试数据输出一行,一个非负整数,表示从第一种状态变换到第二种状态所需要的最少步数。 Sample Input 2 3 0 0 0 1 0 0 4 1 0 0 0 0 1 1 0 Sample Output 7 11
数组指定位置插入和删除
当前编程题:中山外包-实验6-数组程序设计 2. 已知一初始化的数组a[11]={1,2,3,4,5,6,7,8,9,0}。1)输入x1和n1,将数x1插入在数组的n1(下标)处,原数组从该处之后的元素顺序后移,如果插入的位置不合法,则插在数组的最后一个元素之后;2)执行完上述操作之后,输入n2,将数组下标为n2处的元素删除,该处之后的元素顺序前移,如果删除的位置不合法,则删除数组的第一个元素(下标为0) 输入:两行 第一行,2个数,分别代表x1和n1 第二行,一个数,表示n2 输出:三行,每个数占5列 第一行,10个数,表示原数组元素 第二行,11个数,表示进行插入操作之后的数组 第三行,10个数,代表进行插入之后,又进行了删除操作之后的数组
字符串的一道题,我的答案超时了,希望大神在原有基础上帮我改正
描述 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。 试输出第1个最长的单词和第1个最短单词。 输入 一行句子。 输出 两行输出: 第1行,第一个最长的单词。 第2行,第一个最短的单词。 样例输入 I am studying Programming language C in Peking University 样例输出 Programming I 提示 如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。 ``` #include<stdio.h> #include<string.h> int main() { char ch[222222]; int i,max=0,min=120,a,b,c,d,t=0; gets(ch); int len=strlen(ch); for(i=0;i<len;i++) { if(ch[i]==' ') { int n=i-t+1; if(n>max) {max=n;a=t;b=i-1;} if(n<min) {min=n;c=t,d=i-1;} t=i+1; } } for(i=a;i<=b;i++) printf("%c",ch[i]); printf("\n"); for(i=c;i<=d;i++) printf("%c",ch[i]); return 0; } ``` 地址http://noi.openjudge.cn/ch0107/25/
C语言数据结构输出学号,表示各个学生的成绩,以学号递增顺序给出,第一个学生学号为1
Problem Description 转眼又到了一年的年末,Lele又一次迎来了期末考试。虽然说每年都要考试,不过今年的这场考试对Lele来说却意义重大。 因为经济原因,如果今年没有排在班级前几名,而拿不到奖学金的话,家里便无力再供他继续读书。而且家里帮他都想好出路了——回家种田!! 虽说Lele心里有一百个不愿意,不过父母的话不能不听。 忐忑不安地考完试,Lele拿到了全班的成绩单,这张成绩单是按学号顺序排好的。Lele很想知道班里到底有多少人分数比他高,现在就请你帮帮他,帮他数一下到底有多少人的分数比他高吧。 Input 数据的第一行有一个正整数T,表示测试的组数。接下来有T组测试。 每组数据包括两行。 第一行有两个正整数N K(0<N<1000,0<K<=N),分别表示成绩单上一共的学生数目,和Lele的学号。 第二行有N个整数Xi(0<=Xi<=100)分别表示各个学生的成绩,以学号递增顺序给出,第一个学生学号为1。 Output 对于每组数据,请在一行里输出班里一共有多少个学生成绩高于Lele Sample Input 1 3 2 81 72 63 Sample Output 1
对于每一个输入,单独输出一行。如果该字符串是合法的IP,输出YES,否则, 输出NO
1.问题:IP地址判断 描述 在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。合法的IP是这样的形式: A.B.C.D 其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不会有前导零存在,如001这种情况。现在,请你来完成这个判断程序吧 输入 输入由多行组成,每行是一个字符串,输入由“End of file”结束。字符串长度最大为30,且不含空格和不可见字符。 输出 对于每一个输入,单独输出一行。如果该字符串是合法的IP,输出YES,否则, 输出NO 样例 输入 输出 202.115.32.24 YES a.b.c.d NO End of file 2.我自己写的一段代码 ``` #include <stdio.h> #include <string.h> int main() { char c[35]; int i, d1, d2, d3, mid, zhi1, zhi2, zhi3, zhi4, oo,gd=0, m; while (1) { for (i = 0; i <= 35; i++) { c[i] = -1; } //初始化 i = 0; m = 0; while (c[m] != '\n') { c[i] = getchar(); m = i; i++; } oo = m - 1; if (strcmp(c, "End of file") == 0) break; else { for (i = 0; i <= 35; i++) //字符转成数字 { c[i] = c[i] - 48; } for (i = 0; i <= oo; i++) { if ((c[i] >= 10 || c[i] < 0) && c[i] != '.' - 48) gd++; } if (gd != 0 || (c[oo] < 0 || c[oo]>9)) { mid = 0; goto end; } //找到小数点。格式不符合规范就结束 for (d1 = 0; d1 <= 35; d1++) { if (c[d1] == '.' - 48) break; } for (d2 = d1 + 1; d2 <= 35; d2++) { if (c[d2] == '.' - 48) break; } for (d3 = d2 + 1; d3 <= 35; d3++) { if (c[d3] == '.' - 48) break; } if (d1 == 36 || d2 == 36 || d3 == 36 || d1 == 0 || d2 - d1 == 1 || d3 - d2 == 1 || d1 >= 4 || d2 - d1 - 1 >= 4 || d3 - d2 - 1 >= 4 || oo - d3 >= 4) { mid = 0; goto end; } //下面判断输入的值是否符合规范 //第一段 if (d1 == 3) { if (c[0] == 0 || (c[0] == 0 && c[1] == 0)) { mid = 0; goto end; } else zhi1 = c[0] * 100 + c[1] * 10 + c[2]; } else if (d1 == 2) { if (c[0] == 0) { mid = 0; goto end; } else zhi1 = c[0] * 10 + c[1]; } else if (d1 == 1) { zhi1 = c[0]; } //第二段 if (d2 - d1 == 4) { if (c[d1 + 1] == 0 || (c[d1 + 2] == 0 && c[d1 + 1] == 0)) { mid = 0; goto end; } else zhi2 = c[d1 + 1] * 100 + c[d1 + 2] * 10 + c[d1 + 3]; } else if (d2 - d1 == 3) { if (c[d1 + 1] == 0) { mid = 0; goto end; } else zhi2 = c[d1 + 1] * 10 + c[d1 + 2]; } else if (d2 - d1 == 2) { zhi2 = c[d1 + 1]; } //第三段 if (d3 - d2 == 4) { if (c[d2 + 1] == 0 || (c[d2 + 1] == 0 && c[d2 + 2] == 0)) { mid = 0; goto end; } else zhi3 = c[d2 + 1] * 100 + c[d2 + 2] * 10 + c[d2 + 3]; } else if (d3 - d2 == 3) { if (c[d2 + 1] == 0) { mid = 0; goto end; } else zhi3 = c[d2 + 1] * 10 + c[d2 + 2]; } else if (d3 - d2 == 2) { zhi3 = c[d2 + 1]; } //第四段 if (oo - d3 == 3) { if (c[d3 + 1] == 0 || (c[d3 + 1] == 0 && c[d3 + 2] == 0)) { mid = 0; goto end; } else zhi4 = c[d3 + 1] * 100 + c[d3 + 2] * 10 + c[d3 + 3]; } else if (oo - d3 == 2) { if (c[d3 + 1] == 0) { mid = 0; goto end; } else zhi4 = c[d3 + 1] * 10 + c[d3 + 2]; } else if (oo - d3 == 1) { zhi4 = c[d3 + 1]; } if (zhi1 >= 0 && zhi2 >= 0 && zhi3 >= 0 && zhi4 >= 0 && zhi1 <= 255 && zhi2 <= 255 && zhi3 <= 255 && zhi4 <= 255) { mid = 1; } else { mid = 0; } end: if (mid == 0) printf("NO\n"); else printf("YES\n"); } } return 0; } ``` 我试过了各种能想到的情况都是符合题目要求的,但是oj只给我了10.5/30分,我不知道有什么情况没有考虑到,求大神指点^o^。 ------------------------------------------------------------------------------- 谢谢大家,解决问题了^o^,循环的过程里面有变量的值改变了,我忘了在循环开始的时候初始化。不过还是谢谢大家的想法,我学到了很多呢!
字符串的一道题,大神帮我改一下
描述 医生在书写药品名的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要大写,其他字母小写。如将ASPIRIN、aspirin整理成Aspirin。 输入 第一行一个数字n,表示有n个药品名要整理,n不超过100。 接下来n行,每行一个单词,长度不超过20,表示医生手书的药品名。药品名由字母、数字和-组成。 输出 n行,每行一个单词,对应输入的药品名的规范写法。 样例输入 4 AspiRin cisapride 2-PENICILLIN Cefradine-6 样例输出 Aspirin Cisapride 2-penicillin Cefradine-6 来源 ``` #include<stdio.h> #include<string.h> int main() { int n,i,j; char ch[256]; scanf("%d",&n); for(j=0;j<n;j++) { gets(ch); int len=strlen(ch); for(i=0;i<len;i++) { if(i==0) { if(ch[i]>='a'&&ch[i]<='z') ch[i]-=32; } else { if(ch[i]>='A'&&ch[i]<='Z') ch[i]+=32; } } printf("%s\n",ch); } return 0; } ``` 无法完整运行程序
c语言编程中求多项式加法
多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。 程序要处理的幂最大为100。 输入格式: 总共要输入两个多项式,每个多项式的输入格式如下: 每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。 注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。 输出格式: 从最高幂开始依次降到0幂,如: 2x6+3x5+12x3-6x+20 注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。 输入样例: 6 2 5 3 3 12 1 6 0 20 6 2 5 3 2 12 1 6 0 20 输出样例: 4x6+6x5+12x3+12x2+12x+40 时间限制:500ms内存限制:32000kb C
最小费用狗 C语言
Problem Description 在地球上的一个鲜为人知的角落,住着这样一群人.他们整日与算法为伴,以研究出高效的算法为荣.就连竞选村长都是以Word Final的标准进行的.这里的算法风气之浓厚,就连当地的动物们都受到了极大的影响.旺财是村长--TCL(相当于世界冠军的水平)的爱犬,从小就受到村长一家的熏陶,当别的小动物都还在算A+B的的时候,旺财已经学会"迪杰斯特拉"和"贝尔曼-佛德"了,因此他一直是当地的小动物们崇拜的对象,它们眼中的最有希望进Animal Kingdom World Final的明日之星,就连村里面耕地的老牛们见了他都要叫声"大牛好~". 可是,旺财也有他的苦衷.TCL对待他实在是太好了,每天都请医疗专家周海角为旺财开出许多的保健药品(据说TCL那么牛就是因为从小吃周海角开的药).周海角作为一名医疗专家,有着数十年的江湖行医经验,他的药方不是一般人能开得出来的.他每次都会开出两张药方,第一张药方上写有N1种药品(每种药的编号分别为1,2,3……,N1),第二张药方上写有N2种药品(编号分别为N1+1,N1+2,N1+3……,N1+N2),之所以要这样,是因为第一张药方上的药只有村北的药店里才有,而第二张药方上的药只有村南的药店里才有,并且,药方上还明确指出哪些药必须在哪些药服用之后才能服用,否则会有脑残的危险!还需要一提的药是不能打包带回去,只能在相应的药店里在专家指导下当场服用,安全第一嘛。旺财还面临的一个问题是:村北和村南的药店相隔甚远,而且两地之间还有一个规定凡是4条腿或4个轮子的东西经过都要交钱的收费站,作为一条精通算法的小狗,旺财始终把"提高效率减小耗费"作为自己的座右铭.他在想要怎样吃药才能使跑远路的次数最少,这样过路费也会最小.从村南到村北或从村北到村南算一次跑远路,到最后吃完药跑回家,也算一次哦. Input 有多组输入数据.每组数组的第一行有三个整数N1, N2, M. 接下来有M行数组,每行有两个整数 a, b, 分别表示在吃第a种药之前,需要先吃第b种药. 最后一组数据后,会有三个0表示输入结束。所有的数据中, 1<=N1,N2<=60000, 0<=M<=120000, 1<=a,b<=N1+N2. Output 每组数据输出一个整数,表示旺财把药房上的药吃完所需的跑远路的次数. Sample Input 5 3 3 1 2 5 1 3 2 0 0 0 Sample Output 3
C语言 最小费用狗
Problem Description 在地球上的一个鲜为人知的角落,住着这样一群人.他们整日与算法为伴,以研究出高效的算法为荣.就连竞选村长都是以Word Final的标准进行的.这里的算法风气之浓厚,就连当地的动物们都受到了极大的影响.旺财是村长--TCL(相当于世界冠军的水平)的爱犬,从小就受到村长一家的熏陶,当别的小动物都还在算A+B的的时候,旺财已经学会"迪杰斯特拉"和"贝尔曼-佛德"了,因此他一直是当地的小动物们崇拜的对象,它们眼中的最有希望进Animal Kingdom World Final的明日之星,就连村里面耕地的老牛们见了他都要叫声"大牛好~". 可是,旺财也有他的苦衷.TCL对待他实在是太好了,每天都请医疗专家周海角为旺财开出许多的保健药品(据说TCL那么牛就是因为从小吃周海角开的药).周海角作为一名医疗专家,有着数十年的江湖行医经验,他的药方不是一般人能开得出来的.他每次都会开出两张药方,第一张药方上写有N1种药品(每种药的编号分别为1,2,3……,N1),第二张药方上写有N2种药品(编号分别为N1+1,N1+2,N1+3……,N1+N2),之所以要这样,是因为第一张药方上的药只有村北的药店里才有,而第二张药方上的药只有村南的药店里才有,并且,药方上还明确指出哪些药必须在哪些药服用之后才能服用,否则会有脑残的危险!还需要一提的药是不能打包带回去,只能在相应的药店里在专家指导下当场服用,安全第一嘛。旺财还面临的一个问题是:村北和村南的药店相隔甚远,而且两地之间还有一个规定凡是4条腿或4个轮子的东西经过都要交钱的收费站,作为一条精通算法的小狗,旺财始终把"提高效率减小耗费"作为自己的座右铭.他在想要怎样吃药才能使跑远路的次数最少,这样过路费也会最小.从村南到村北或从村北到村南算一次跑远路,到最后吃完药跑回家,也算一次哦. Input 有多组输入数据.每组数组的第一行有三个整数N1, N2, M. 接下来有M行数组,每行有两个整数 a, b, 分别表示在吃第a种药之前,需要先吃第b种药. 最后一组数据后,会有三个0表示输入结束。所有的数据中, 1<=N1,N2<=60000, 0<=M<=120000, 1<=a,b<=N1+N2. Output 每组数据输出一个整数,表示旺财把药房上的药吃完所需的跑远路的次数. Sample Input 5 3 3 1 2 5 1 3 2 0 0 0 Sample Output 3
输入字符串构建两个二叉搜索树
A tempting approach to maintaining a balanced binary search tree is to maintain two binary search trees and to insert each new key into the tree that will be more balanced. More specifically, do the following: The first key is the root of the left tree. The second key is the root of the right tree. To add a new key, insert it into the tree where it would have a smaller depth. If the depths of both trees are the same, then add it to the first tree.The input will be 5 strings (ignore everything but the letters A through Z and a through z; uppercase and lowercase are the same). For each input string, build the two trees with each string as described above. Print contents of the first tree in preorder (root, then the left child, then the right child). Sample Input: Line #1: AMERICAN COMPUTER SCIENCE Line #2: I must say that I find television very educational Line #3: INTERMEDIATE DIVISION Sample Output: Output #1: A A E C C E E N I P S Output #2: I A A A A I D D C E E I U T T S R U Y V Y Output #3: I E E A I I I T T V 维护一个平衡的二叉搜索树的一个诱人的方法是维护两个二叉搜索树,并将每个新键插入树中,这样会更加平衡。更具体地说,执行以下操作:第一个键是左树的根。第二个键是右树的根。若要添加新键,请将其插入到树中其深度较小的位置。如果两棵树的深度相同,则将其添加到第一棵树上。 输入将是5个字符串(忽略除了字母A到Z和A到Z;大写和小写是一样的)。对于每个输入字符串,使用上面描述的每个字符串构建两个树。按顺序打印第一个树的内容(根,然后左子树,然后右子树)。 样例输入: 第一行:美国计算机科学 我得说我觉得电视很有教育意义 第3行:中间部分 样例输出: 输出#1:A A E C C E E N I P S 输出#2:I A A A I D D C E E I U T S R U Y V Y 输出#3:ieia I I T T V 基本要求:算法合理,结果准确
C语言 将文章划分为最少的单词。
Problem Description    著名的考古学家石教授在云梦高原上发现了一处古代城市遗址。让教授欣喜的是在这个他称为冰峰城(Ice-Peak City)的城市中有12块巨大石碑,上面刻着用某种文字书写的资料,他称这种文字为冰峰文。然而当教授试图再次找到冰峰城时,却屡屡无功而返。    幸好当时教授把石碑上的文字都拍摄了下来,为了解开冰峰城的秘密,教授和他的助手牛博士开始研究冰峰文,发现冰峰文只有陈述句这一种句型和名词(n)、动词(v)、辅词(a)这三类单词,且其文法很简单: <文章> ::= <句子> { <句子> } <句子> ::= <陈述句> <陈述句> ::= <名词短语> { <动词短语> <名词短语> } [ <动词短语> ] <名词短语> ::= <名词> | [ <辅词> ] <名词短语> <动词短语> ::= <动词> | [ <辅词> ] <动词短语> <单词> ::= <名词> | <动词> | <辅词> 注:其中<名词>、<动词>和<辅词>由词典给出,“::=”表示定义为,“|”表示或,{}内的项可以重复任意多次或不出现,[]内的项可以出现一次或不出现。    在研究了大量资料后,他们总结了一部冰峰文词典,由于冰峰文恰好有26个字母,为了研究方便,用字母a到z表示它们。 冰峰文在句子和句子之间以及单词和单词之间没有任何分隔符,因此划分单词和句子令石教授和牛博士感到非常麻烦,于是他们想到了使用计算机来帮助解决这个问题。假设你接受了这份工作,你的第一个任务是写一个程序,将一篇冰峰文文章划分为最少的句子,在这个前提下,将文章划分为最少的单词。 Input 输入文件含有多组数据。 对于每一组数据来说,第1行为词典中的单词数n(n<=1000)。 第2行至第(n+1)行每行表示一个单词,形为“α.mot”, α表示词性,可能是n(名词),v(动词),a(辅词)中的一个,mot为单词,单词的长度不超过20。拼写相同而词性不同的单词视为不同的单词,如输入示例中的n.kick与v.kick是两个不同的单词。 第(n+2)行为需要划分的文章,以“.”结束。 输入中的文章确保为冰峰文。文章是由有限个句子组成的,每个句子只包含有限个单词。文章长度不超过5KB。 Output 对于每一组数据,输出两行,每行一个整数。 第1行为划分出来的句子数。 第2行为划分出来的单词数。 每一组数据之后保留出一个空行。 Sample Input 11 n.table n.baleine a.silly n.snoopy n.sillysnoopy v.is v.isnot n.kick v.kick a.big v.cry sillysnoopyisnotbigtablebaleinekicksnoopysillycry. Sample Output 2 9
最小费用狗,C语言的程序
Problem Description 在地球上的一个鲜为人知的角落,住着这样一群人.他们整日与算法为伴,以研究出高效的算法为荣.就连竞选村长都是以Word Final的标准进行的.这里的算法风气之浓厚,就连当地的动物们都受到了极大的影响.旺财是村长--TCL(相当于世界冠军的水平)的爱犬,从小就受到村长一家的熏陶,当别的小动物都还在算A+B的的时候,旺财已经学会"迪杰斯特拉"和"贝尔曼-佛德"了,因此他一直是当地的小动物们崇拜的对象,它们眼中的最有希望进Animal Kingdom World Final的明日之星,就连村里面耕地的老牛们见了他都要叫声"大牛好~". 可是,旺财也有他的苦衷.TCL对待他实在是太好了,每天都请医疗专家周海角为旺财开出许多的保健药品(据说TCL那么牛就是因为从小吃周海角开的药).周海角作为一名医疗专家,有着数十年的江湖行医经验,他的药方不是一般人能开得出来的.他每次都会开出两张药方,第一张药方上写有N1种药品(每种药的编号分别为1,2,3……,N1),第二张药方上写有N2种药品(编号分别为N1+1,N1+2,N1+3……,N1+N2),之所以要这样,是因为第一张药方上的药只有村北的药店里才有,而第二张药方上的药只有村南的药店里才有,并且,药方上还明确指出哪些药必须在哪些药服用之后才能服用,否则会有脑残的危险!还需要一提的药是不能打包带回去,只能在相应的药店里在专家指导下当场服用,安全第一嘛。旺财还面临的一个问题是:村北和村南的药店相隔甚远,而且两地之间还有一个规定凡是4条腿或4个轮子的东西经过都要交钱的收费站,作为一条精通算法的小狗,旺财始终把"提高效率减小耗费"作为自己的座右铭.他在想要怎样吃药才能使跑远路的次数最少,这样过路费也会最小.从村南到村北或从村北到村南算一次跑远路,到最后吃完药跑回家,也算一次哦. Input 有多组输入数据.每组数组的第一行有三个整数N1, N2, M. 接下来有M行数组,每行有两个整数 a, b, 分别表示在吃第a种药之前,需要先吃第b种药. 最后一组数据后,会有三个0表示输入结束。所有的数据中, 1<=N1,N2<=60000, 0<=M<=120000, 1<=a,b<=N1+N2. Output 每组数据输出一个整数,表示旺财把药房上的药吃完所需的跑远路的次数. Sample Input 5 3 3 1 2 5 1 3 2 0 0 0 Sample Output 3
数组走到右上角时可以获得的最大金币数目,请问怎么样才能使用C语言的程序的编写的技术实现的?
Problem Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向上向下向右走以前没有走过的格子,每一个格子中都有一些金币(或正或负,有可能遇到强盗拦路抢劫,度度熊身上金币可以为负,需要给强盗写欠条),度度熊刚开始时身上金币数为0,问度度熊走出迷宫时候身上最多有多少金币? Input 输入的第一行是一个整数T(T < 200),表示共有T组数据。 每组数据的第一行输入两个正整数m,n(m<=100,n<=100)。接下来的m行,每行n个整数,分别代表相应格子中能得到金币的数量,每个整数都大于等于-100且小于等于100。 Output 对于每组数据,首先需要输出单独一行”Case #?:”,其中问号处应填入当前的数据组数,组数从1开始计算。 每组测试数据输出一行,输出一个整数,代表根据最优的打法,你走到右上角时可以获得的最大金币数目。 Sample Input 2 3 4 1 -1 1 0 2 -2 4 2 3 5 1 -90 2 2 1 1 1 1 Sample Output Case #1: 18 Case #2: 4
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
小白如何学习java?
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
羞,Java 字符串拼接竟然有这么多姿势
二哥,我今年大二,看你分享的《阿里巴巴 Java 开发手册》上有一段内容说:“循环体内,拼接字符串最好使用 StringBuilder 的 append 方法,而不是 + 号操作符。”到底为什么啊,我平常一直就用的‘+’号操作符啊!二哥有空的时候能否写一篇文章分析一下呢? 就在昨天,一位叫小菜的读者微信我说了上面这段话。 我当时看到这条微信的第一感觉是:小菜你也太菜了吧,这都不知道为啥啊!我估
"狗屁不通文章生成器"登顶GitHub热榜,分分钟写出万字形式主义大作
前言 GitHub 被誉为全球最大的同性交友网站,……,陪伴我们已经走过 10+ 年时间,它托管了大量的软件代码,同时也承载了程序员无尽的欢乐。 上周给大家分享了一篇10个让你笑的合不拢嘴的Github项目,而且还拿了7万+个Star哦,有兴趣的朋友,可以看看, 印象最深刻的是 “ 呼吸不止,码字不停 ”: 老实交代,你是不是经常准备写个技术博客,打开word后瞬间灵感便秘,码不出字? 有什么
推荐几款比较实用的工具,网站
1.盘百度PanDownload   这个云盘工具是免费的,可以进行资源搜索,提速(偶尔会抽风......) 不要去某站买付费的......   PanDownload下载地址   2.BeJSON 这是一款拥有各种在线工具的网站,推荐它的主要原因是网站简洁,功能齐全,广告相比其他广告好太多了     bejson网站   3.二维码美化 这个网站的二维码美化很好看,网站界面
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的段子
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问